【问题标题】:Authorize attribute on Ajax Action methods in controller控制器中 Ajax Action 方法的授权属性
【发布时间】:2011-11-02 02:51:54
【问题描述】:

我试图在我的 MVC3 应用程序中授权 ajax 操作方法。当用户会话到期并要求执行 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而言,我是一个相对新手的程序员,所以我想在实际实现代码之前我会征求其他意见。

【问题讨论】:

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


    【解决方案1】:

    这是blog post,我强烈建议您阅读。它说明了处理此问题的更好方法。

    【讨论】:

    • 感谢您的链接。我想我会采用博客中建议的方法。我安装了同样的 Nuget 包,它似乎工作正常。
    • @Nirvan,太好了。我很高兴您采用了这种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2013-06-20
    相关资源
    最近更新 更多