JQuery和MVC Session Time Out没有重定向

时间:2012-07-19 05:37:51

标签: jquery asp.net-mvc

我有一个MVC应用程序,它使用$ .ajax从Controller获取数据。

不幸的是,当会话超时发生时,页面不会被重定向到Login页面。有人可以帮忙解决这个问题吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以编写一个自定义[Authorize]属性,该属性将返回JSON,而不是在未经授权的访问时抛出401异常,这将允许客户端脚本优雅地处理该方案:

AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.Result = new JsonResult
            {
                Data = new 
                { 
                    // put whatever data you want which will be sent
                    // to the client
                    message = "sorry, but you were logged out" 

                },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

在ajax你可以这样做:

$.get('@Url.Action("SomeAction")', function (result) {
    if (result.message) {
        alert(result.message);
        window.location.reload();
    } else {
        // do whatever you were doing before with the results
    }
});

答案 1 :(得分:0)

如果默认情况下页面要重定向,您可以尝试捕获特定的超时/身份验证错误,并根据此错误从客户端重定向到登录控制器

这里有一篇来自本文的例子

http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

  $.ajax({
  url: "/yourservlet",
  data: { },
  complete: function(xmlHttp) {
     if(xmlHttp.status==401)
      {
    // redirect to login page

     }
  }
});