如何覆盖MVC Web API中的[Authorize]属性?

Nul*_*nce 1 asp.net-mvc-4 asp.net-web-api

我有一个MVC Web Api控制器,它使用类级别的[Authorize]属性.这使得所有的api方法都需要授权,但是我想创建一个名为[ApiPublic]的属性来覆盖[Authorize]属性.中描述了一种类似的技术在这里用于正常MVC的控制器.

我尝试创建一个基于System.Web.Http.AuthorizeAttribute的AuthorizeAttribute,但如果我把它放在一个在类级别具有[Authorize]的api方法上,则不会调用任何被覆盖的事件.任何人都知道如何覆盖web api的授权?

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class ApiPublicAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        base.HandleUnauthorizedRequest(actionContext);
    }

    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        base.OnAuthorization(actionContext);
    }

    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mis*_*mes 10

我可以建议您只使用[AllowAnonymous]吗?

您可以在任何方法上对此进行归因,它将覆盖您在类级别指定的Authorize属性,从而使您无需编写自己的属性.