1-我有一个调用动作的Ajax链接,该动作返回一个视图,该视图在特定Div中打开(将其视为用相应视图更新div的菜单)
2-如果会话超时返回我的登录视图
2-如果会话超时返回我的登录视图
解决方法
处理会话到期的有效方法是创建自定义Authorization属性,并在会话已过期并且正在处理ajax请求时返回HTTP 403响应.
要创建一个支持Ajax的授权属性,您可以从AuthorizeAttribute继承并覆盖HandleUnauthorizedRequest事件,并检查请求的类型,例如. IsAjaxRequest()
public class AjaxAuthorizeAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (filterContext.HttpContext.Request.IsAjaxRequest()) { // Fire back an unauthorized response filterContext.HttpContext.Response.StatusCode = 403; } else base.HandleUnauthorizedRequest(filterContext); } }
然后就像使用Authorize一样,使用AjaxAuthorize属性装饰控制器或操作
[AjaxAuthorize(Roles = "1,2,3,4,5")] public class HomeController {
然后,如果您正在使用jQuery,则可以通过创建全局ajax错误处理程序来处理403响应.
$.ajaxSetup({ error: function (x,e) { if (x.status == 403) { alert("Sorry,your session has expired. Please login again to continue"); window.location = "/login"; } } });