在控制器中授权Ajax Action方法的属性

我试图在我的MVC3应用程序中授权ajax动作方法。 当用户会话到期并要求执行ajax操作方法时,会发生此问题。 asp.net身份validation系统发送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全局error handling程序中(包含在asp.net mvc主页:_Layout.cshtml中)

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

我刚刚快速测试了这段代码,似乎工作正常。 此代码是否存在任何潜在问题。 就asp.net mvc和jquery而言,我是一个相对新手的程序员,所以我想在实际实现代码之前我会要求其他意见。

这是一篇博文 ,我强烈建议你阅读。 它说明了处理这个问题的更好方法。