3

ASP.Net Web APIアプリケーションを開発しており、認証にAuthorizeAttributeを使用しました。認証に失敗した場合、実行されるコードはthisです。

protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
    {
        HttpContext.Current.Response.AddHeader("AuthenticationStatus", "NotAuthorized");
        actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
        return;
    }

このコードは、ブラウザから不正なリクエストページを表示する結果になりますが、私が欲しいのは、私が設計したカスタムページを表示することです。それ、どうやったら出来るの?

4

2 に答える 2

6

Check this out: http://weblogs.asp.net/jgalloway/archive/2012/03/23/asp-net-web-api-screencast-series-part-6-authorization.aspx

What it basically says, you have to check the result code on the client side, and in case it is 401 (Unauthorized), redirect the user to the custom page you've designed:

$(function () { 
    $("#getCommentsFormsAuth").click(function () { 
        viewModel.comments([]); 
        $.ajax({ url: "/api/comments", 
           accepts: "application/json", 
           cache: false, 
           statusCode: { 
            200: function(data) { 
                viewModel.comments(data); 
            }, 
            401: function(jqXHR, textStatus, errorThrown) { 
                self.location = '/Account/Login/'; 
            } 
        } 
    }); 
  }); 
});
于 2012-09-19T17:05:28.770 に答える
4

WebApiを使用している場合、HandleUnathorizedRequest内からカスタムページにリダイレクトできるとは思いません。コードの結果には、許可されていないリクエストページが表示されます。これは、ブラウザが403コードに応答する方法であるためです。WebApiはHttpMessage交換で動作し、デフォルトでJsonまたはXmlメディアタイプのいずれかを使用します。カスタマイズしたページをtext/htmlとして返したい場合は、ここで説明されているように、独自のメディアフォーマッターを作成する必要があります:http ://www.asp.net/web-api/overview/formats-and-model-binding/メディアフォーマッター

于 2012-08-05T21:36:39.693 に答える