asp.net-mvc-2 - ASP.NET MVC 授权属性在用户未经授权时执行 302 重定向

标签 asp.net-mvc-2

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/

相关文章:

asp.net-mvc - 如何使用 ASP.NET MVC 2 在 NHibernate 上实现

asp.net - 如何制作自定义强类型 html 帮助器方法?

c# - 为什么我的静态类没有在 ASP.NET MVC 中初始化?

asp.net-mvc-2 - ASP.NET MVC2 和路由

asp.net-mvc - 单选按钮更改事件

asp.net-mvc-2 - ASP.NET MVC 2.0 session 状态连接错误处理

asp.net-mvc-2 - 如何在 ASP.NET MVC 2.0 中的 View 之外创建 HtmlHelper?

.net - 具有多个环境的 MsBuild 和 MsDeploy

jquery - 如何将焦点保持在按 Enter 提交表单的输入元素上

asp.net-mvc - asp.mvc 更改请求路径中的 Controller 名称