跳过基于另一个过滤器asp .net的过滤器执行

本文关键字:过滤器 asp net 执行 另一个 | 更新日期: 2023-09-27 18:12:12

我有一个操作被授权如下:

[Authorize(Roles = "Admin, Agency, Subscribed, Normal")]
public ActionResult LocationProfile()
{}

我需要的是添加另一个过滤器,在授权过滤器之前执行,如果结果为真,则不执行授权属性并直接执行我的操作(LocationProfile())

有没有办法完成这个任务

跳过基于另一个过滤器asp .net的过滤器执行

您必须使用自己的内置该功能的Authorize属性版本。来自上面链接的c#角帖:

public class CustomAuthorizeAttribute : AuthorizeAttribute  
{  
   Entities context = new Entities(); // my entity  
   private readonly string[] allowedroles;  
   public CustomAuthorizeAttribute(params string[] roles)  
   {  
      this.allowedroles = roles;  
   }  
   protected override bool AuthorizeCore(HttpContextBase httpContext)  
   {  
      bool authorize = false;  
      foreach (var role in allowedroles)  
      {  
         var user = context.AppUser.Where(m => m.UserID == GetUser.CurrentUser/* getting user form current context */ && m.Role == role &&  
         m.IsActive == true); // checking active users with allowed roles.  
         if (user.Count() > 0)  
         {  
            authorize = true; /* return true if Entity has current user(active) with specific role */  
         }  
      }  
      return authorize;  
   }  
   protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)  
   {  
      filterContext.Result = new HttpUnauthorizedResult();  
   }  
}  

在AuthorizeCore方法中,您需要为描述的情况添加检查。