如何在超时时重定向Ajax方法会话

时间:2012-11-12 08:02:10

标签: asp.net-mvc

所以我得到了一个返回JSON结果的ajax方法,但该方法的一部分是检查会话是否有效。

因此,如果用户刷新页面,则调用ajax方法,在会话过期时抛出异常,现在该方法想要返回JSON结果,但我想将它们重定向到登录页面

我该怎么做?

public JsonResult GetClients()
{
var usertoken = new UserToken(this.User.Identity.Name);
if (usertoken.AccountId != null)
{
return new JsonResult() {Data = model, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
}
else
{
 //Redirect Here
}

2 个答案:

答案 0 :(得分:1)

AFAIK您只能通过JavaScript执行此操作,因为您的调用使用的是ajax,其他帖子的解决方案无法正常工作,因为重定向标头不适合ajax请求。

您可能希望在返回结果中添加status或hasExpire属性:

[HttpPost]
public ActionResult GetClients()
{
var usertoken = new UserToken(this.User.Identity.Name);
if (usertoken.AccountId != null)
{
return Json(new { data = model, status = true });
}
else
{
  return Json(new { data = null, status = false });
}

在你的ajax电话上:

$.ajax('/controller/getclients', { }, function(data) {
  if(data.status == true) {
    // same as before you've got your model in data.data...
  } else {
    document.location.href = '/account/login';
  }
});

希望有所帮助。

答案 1 :(得分:0)

在控制器代码中,检查会话有效性。例如

        if (Session["UserName"] == null)
        {
            return Json(new
            {
                redirectUrl = ConfigurationManager.AppSettings["logOffUrl"].ToString(),
                isTimeout = true
            });
        }

在.js文件中检查如下

    success: function (data) {
        if (data != '' && typeof data != 'undefined') {
            if (data.isTimeout) {
                window.location.href = data.redirectUrl;
                return;
            }