クラス レベルで [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;
}
}