1

クラス レベルで [Authorize] 属性を使用する MVC Web Api コントローラーがあります。これにより、すべての API メソッドで認証が必要になりますが、[Authorize] 属性をオーバーライドする [ApiPublic] という属性を作成したいと考えています。通常の 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;
    }
}
4

1 に答える 1

10

代わりに[AllowAnonymous]を使用することをお勧めしますか?

これは任意のメソッドに関連付けることができ、クラスレベルで指定したAuthorize属性をオーバーライドして、独自の属性を作成する手間を省きます。

于 2012-09-06T15:47:38.050 に答える