6

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);
    }
}
4

2 回答 2

0

OverrideAuthorization 属性完全符合您的要求(在 ASP.NET Web API 2 中)。您可以在本文中简单地找到它的用法和用途。

于 2019-10-09T08:25:08.790 回答
0

您可以使用OverrideAuthenticationAttribute。正如您可以回答的那样,此属性用于抑制全局身份验证过滤器。

于 2017-07-13T18:49:23.503 回答