我CustomAuthorizeAttribute
在我的 Web Api 项目中定义了一个默认值。
config.Filters.Add(new CustomAuthorizeAttribute());
但是我有一个特殊的控制器,我想在其中使用SpecialAuthorizeAttribute
.
[SpecialAuthorize]
public class MySpecialController : ApiController
在 Asp.Net vNext 中,我们有一个新属性来覆盖默认过滤器,但我怎样才能让它在 Web Api 2 中工作?
编辑1:
一种可能(但不理想)的解决方案是让 CustomAuthorizeAttribute 检查 Controller 或 Action 范围内是否还有另一个 AuthorizeAttribute。就我而言,我只有 SpecialAuthorizeAttribute 所以:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<SpecialAuthorizeAttribute>().Any() || actionContext.ActionDescriptor.GetCustomAttributes<SpecialAuthorizeAttribute>().Any())
{
return;
}
base.OnAuthorization(actionContext);
}
public override System.Threading.Tasks.Task OnAuthorizationAsync(System.Web.Http.Controllers.HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
{
return base.OnAuthorizationAsync(actionContext, cancellationToken);
}
}