在我的filterConfig中,我注册了一个全局属性过滤器,需要对我的每个方法进行授权.
但是,我有一个特殊的方法,我想应用不同的授权过滤器属性.如果可能的话,如何实现这一目标?
注意:我不想使用[AllowAnonymous]属性(它无缝地工作并完全忽略我的过滤器),因为我希望通过该方法上的一组不同的授权逻辑来授权请求.
您可以通过设置属性类AllowMultiple = true的AttributeUsage属性来更改过滤器以允许多个过滤器,并添加一个检查,以便在过滤器多次出现时,全局应用的过滤器不会执行.该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)