AJAXベースのAPIを提供するための代替方法として、MVC4プロジェクトの一部としてWebAPIを調査します。MVCコントローラーのAuthorizeAttributeを拡張して、AJAXリクエストが検出された場合に、JSON形式のエラーが返されるようにしました。WebAPIはエラーをHTMLとして返します。これが、MVCコントローラーで使用しているAuthorizeAttributeです。
public class AuthorizeAttribute: System.Web.Mvc.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "area", "" },
{ "controller", "Error" },
{ "action", ( filterContext.HttpContext.Request.IsAjaxRequest() ? "JsonHttp" : "Http" ) },
{ "id", "401" },
});
}
}
これを再現して、Web APIと同等の機能を提供するにはどうすればよいですか?
System.Web.Mvc.AuthorizeAttributeではなくSystem.Web.Http.AuthorizeAttributeを拡張する必要があることに気付きましたが、これはAuthorizationContextではなくHttpActionContextを使用しているため、WebAPIに関する知識が限られていることと一見不完全なことに固執しています。 MSDNのドキュメント。
これが正しいアプローチであると考えるのは正しいですか?
ガイダンスをいただければ幸いです。