MSDN 明确表示它应该执行 401 重定向,但我在 FF 上获得了 302 重定向,这导致 AJAX 请求出现问题,因为返回的状态为 200(来自重定向页面)。
http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx
我发现其他人有同样的问题:
http://blog.nvise.com/?p=26
除了他的,还有别的解决办法吗?
最佳答案
我真的很喜欢这个解决方案。通过将 ajax 请求的 302 响应更改为 401,它允许您在客户端设置您的 ajax 以监视任何寻找 401 的 ajax 请求,如果它找到一个就重定向到登录页面。非常简单有效。
全局.asax:
protected void Application_EndRequest()
{
if (Context.Response.StatusCode == 302 &&
Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
Context.Response.Clear();
Context.Response.StatusCode = 401;
}
}
客户端代码:
$(function () {
$.ajaxSetup({
statusCode: {
401: function () {
location.href = '/Logon.aspx?ReturnUrl=' + location.pathname;
}
}
});
});
关于asp.net-mvc-2 - ASP.NET MVC 授权属性在用户未经授权时执行 302 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3978334/