在ASP.Net Web API中处理HandleUnauthorizedRequest

时间:2012-07-31 07:35:44

标签: asp.net authorization asp.net-web-api custom-error-pages

我正在开发一个ASP.Net Web API应用程序,我使用AuthorizeAttribute进行身份验证。当身份验证失败时,执行的代码就是这个。

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

此代码会显示来自浏览器的未授权请求页面,但我想要的是显示我设计的自定义页面。我怎么做?任何帮助表示赞赏。

先谢谢。

2 个答案:

答案 0 :(得分:6)

检查出来:http://weblogs.asp.net/jgalloway/archive/2012/03/23/asp-net-web-api-screencast-series-part-6-authorization.aspx

基本上说,您必须检查客户端的结果代码,如果是401(未经授权),请将用户重定向到您设计的自定义页面:

$(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/'; 
            } 
        } 
    }); 
  }); 
});

希望它有所帮助,问候

答案 1 :(得分:3)

如果您使用的是WebApi,我认为您不能从HandleUnathorizedRequest中重定向到您的自定义页面。代码结果显示未授权的请求页面,因为这是您的浏览器响应403代码的方式。 WebApi适用于HttpMessage交换,默认情况下使用Json或Xml媒体类型。如果您想以text / html格式返回自定义页面,则必须按照此处的说明编写自己的媒体格式化程序:http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters