【问题标题】:How to override [Authorize] attribute in the MVC Web API?如何覆盖 MVC Web API 中的 [Authorize] 属性?
【发布时间】:2012-09-06 15:36:10
【问题描述】:

我有一个在类级别使用 [Authorize] 属性的 MVC Web Api 控制器。这使得所有 api 方法都需要授权,但我想创建一个名为 [ApiPublic] 的属性来覆盖 [Authorize] 属性。 here 描述了用于普通 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;
    }
}

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

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

    您可以将此属性赋予任何方法,它将覆盖您在类级别指定的 Authorize 属性,从而避免您编写自己的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-30
      • 2015-11-04
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多