jquery - Controller 中 Ajax Action 方法的授权属性

标签 jquery asp.net-mvc asp.net-mvc-3 forms-authentication

我试图在我的 MVC3 应用程序中授权 ajax 操作方法。当用户 session 过期并且要求执行 ajax 操作方法时,就会出现此问题。 asp.net 身份验证系统发送 302 重定向而不是发送 401,这对于非 ajax 请求似乎是合乎逻辑的。但对于 Ajax,一切很快就会变得一团糟。所以我决定遵循 ASP.NET MVC forces an AJAX request be redirected to the login page when the FormsLogin session is no longer active 中建议的方法。 。 基本上,在请求结束时,我们检查请求是否是 ajax 请求以及是否存在重定向(302 响应)。如果是,那么我们将响应代码从 302 替换为 401。因此,在 javascript 中,我们检查 401 并从那里执行重定向。这是我放置的基本代码

在 Global.asax.cs 中

    protected void Application_EndRequest() {
        var context = new HttpContextWrapper(Context);
        // If we're an ajax request, and doing a 302, then we actually need to do a 401
        if (Context.Response.StatusCode == 302 && context.Request.IsAjaxRequest()) {
            Context.Response.Clear();
            Context.Response.StatusCode = 401;
        }
    }

在 JQuery 全局错误处理程序中(包含在 asp.net mvc 母版页中:_Layout.cshtml)

$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
    if (jqXHR.status == 401) {
        window.location.replace(loginUrl);
    }
});

我刚刚快速测试了这段代码,它似乎工作得很好。这段代码是否有任何潜在的问题。就asp.net mvc和jquery而言,我是一个相对新手的程序员,所以我想在实际实现代码之前我应该​​征求其他意见。

最佳答案

这是一个blog post我强烈推荐你阅读。它说明了处理此问题的更好方法。

关于jquery - Controller 中 Ajax Action 方法的授权属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975311/

相关文章:

javascript - 如何在 JavaScript 对象中循环数组?

asp.net-mvc - ASP.NET MVC 未正确加载 FontAwesome(模糊)

c# - Asp MVC 和 Web Api 异步 Controller

c# - 鼠标调整表格列

jquery - 使用 class = 取消按钮禁用 jQuery 验证不起作用

javascript - 如何将HTML表单数据存储在本地?

javascript - 开始将幻灯片切换为隐藏状态,直到获得焦点

asp.net-mvc - Fluent NHibernate 获取已保存对象的 ID

c# - 卸载 MVC 4 RC 后难以安装 MVC 3

javascript - 如何使用 jQuery 脚本一次打开多个链接