【发布时间】: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