【问题标题】:HandleUnauthorizedRequest in ASP.Net Web APIASP.Net Web API 中的 HandleUnauthorizedRequest
【发布时间】:2012-07-31 07:35:44
【问题描述】:

我正在开发一个 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;
    }

此代码会从浏览器显示未经授权的请求页面,但我想要的是显示我设计的自定义页面。我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    看看这个: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/'; 
                } 
            } 
        }); 
      }); 
    });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-21
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 2020-06-04
        • 2013-10-20
        • 1970-01-01
        相关资源
        最近更新 更多