在MVC中为一种方法覆盖全局过滤器

bad*_*ndu 7 c# asp.net-mvc-4

在我的filterConfig中,我注册了一个全局属性过滤器,需要对我的每个方法进行授权.

但是,我有一个特殊的方法,我想应用不同的授权过滤器属性.如果可能的话,如何实现这一目标?

注意:我不想使用[AllowAnonymous]属性(它无缝地工作并完全忽略我的过滤器),因为我希望通过该方法上的一组不同的授权逻辑来授权请求​​.

ana*_*der 5

您可以通过设置属性类AllowMultiple = trueAttributeUsage属性来更改过滤器以允许多个过滤器,并添加一个检查,以便在过滤器多次出现时,全局应用的过滤器不会执行.该ActionExecutingContext获取传递到OnActionExecuting()让你得到通过应用的过滤器filterContext.ActionDescriptor.GetCustomAttributes(),这样你就可以使用这里.

然后,更改构造函数,以便您可以传入一个参数(可能是枚举),它可以用来决定使用哪个授权方法 - 正常的方法,或另一个.为该参数赋予一个默认值,使其选择正常的auth方法.然后,在那个需要不同auth方法的方法上,您可以将过滤器与参数的其他值一起应用.所以它可能看起来像这样:

public class CustomAuthAttribute : AuthorizeAttribute
{
    public CustomAuthAttribute(AuthMethod method = AuthMethod.StandardAuth)
    {
        //stuff
    }
}

[CustomAuth(AuthMethod.WeirdAuth)]
public ActionResult MethodThatNeedsDifferentAuth()
{
    //stuff
}
Run Code Online (Sandbox Code Playgroud)