私のカスタム AuthorizeAttribute が私の MVC WebApi で機能しない理由を見つけようとして、私はインターネットのいたるところにいました。SOでこの種のことについて尋ねる人を見てきましたが、私の問題を解決するのにまだ何も役立っていません:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false,
Inherited = false)]
public sealed class CustomAuthorization : AuthorizeAttribute
{
//...
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// custom auth logic, returns true if authorized, false otherwise
}
}
System.Web.Mvc
とは対照的にから拡張していSystem.Web.Http
ます。しかし、私のAuthorizeCore(HttpContextBase httpContext)
は決して呼び出されません。
CustomAuthorization
クラスにはparams string[]
、特定のアクションに必要なカスタム権限の名前である を受け取るコンストラクターがあります。
[CustomAuthorization("Some Permission")]
[System.Web.Http.HttpGet]
public CustomResponse SomeAction()
{
//...
}
私が達成したいと思っていることは、[CustomAuthorization]
属性で装飾されたアクションに対してリクエストが行われるたびに、認証コードが起動されるようにすることです。また、承認が失敗した場合に、より説明的な認証失敗メッセージを返せるようにしたいと考えています。だけでなく:
{"Message":"Authorization has been denied for this request."}
これにはオーバーライドHandleUnauthorizedRequest
が含まれると思いますが、JSON 応答がシリアル化する独自のオブジェクトを提供するにはどうすればよいですか?
要約すると、アクションを自分の[CustomAuthorization]
属性で装飾しても、フレームワークによって承認コードが呼び出されることはありません。アクション内のコードを実行するだけです。
第 2 に、カスタム JSON オブジェクトをシリアル化するための無許可の応答を実装するにはどうすればよいですか?
事前にご協力いただきありがとうございます。