我正在开发一个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;
}
此代码会显示来自浏览器的未授权请求页面,但我想要的是显示我设计的自定义页面。我怎么做?任何帮助表示赞赏。
先谢谢。
答案 0 :(得分:6)
基本上说,您必须检查客户端的结果代码,如果是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。