在控制器中的Ajax Action方法上授权属性
我试图在我的MVC3应用程序中授权ajax动作方法。 当用户会话过期并且要求执行ajax操作方法时会出现问题。 asp.net身份验证系统发送302重定向,而不是发送401,这对于非Ajax请求似乎是合乎逻辑的。 但是随着Ajax的发展,它们很快就会混乱起来。 所以我决定遵循ASP.NET MVC中建议的方法,当FormsLogin会话不再处于活动状态时,会将AJAX请求重定向到登录页面。 基本上,在请求结束时,我们检查请求是否是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而言,我是一个相对新手的程序员,所以我想在实际执行代码之前我会询问其他意见。
这里有一篇博文,我强烈建议你阅读。 它说明了处理这个问题的更好方法。
链接地址: http://www.djcxy.com/p/71791.html上一篇: Authorize attribute on Ajax Action methods in controller