我试图在我的 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/