会话到期管理asp.net mvc3进行ajax调用

时间:2011-10-11 09:00:08

标签: asp.net-mvc-3 jquery session-timeout

我的问题与this非常相似,但我无法弄清楚如何让事情干涸。 通过使用这篇文章的答案,我可以验证检查特定的AJAX调用,但我的应用程序有几个AJAX调用,如果我采用这种方法,那么我将不得不检查每个AJAX调用成功回调。这不太酷。

你能建议一个很好的方法来处理这个并保持干燥吗?

的Javascript

function GetStuff(x) {
            if (!x.value) return;
            $.post('/website/GetStuff', { val: x.value, text: x.text },
            function (data) {
                $("#ddlStuff").empty().append($("<option>").attr("value", "0").text("Choose...")).removeAttr("disabled");
                $.each(data, function (i, d) { $("<option>").attr("value", d.k).text(d.v).appendTo($("#ddNewStuff")); });
            });
        }

C#

 [HttpPost]
        public JsonResult GetSutff(long val, string text)
        {
            List<string> data = new MyClass().GetDataFromDB(val, text);
            return Json(data);
        }

由于定义了GetStuff操作的控制器在其上面具有Authorize标记。因此,此处进行的所有呼叫都必须进行身份验证。现在,如果会话过期,那么此操作GetStuff将返回主页的html(具有返回URL的主页 - 非常标准的东西),这会导致问题。 像这样,还有其他视图页面,其ajax post操作经过身份验证,当会话失败并返回主页的html时,它们也会在客户端失败。

我希望用户被重定向到一个会话过期的有点页面,并希望知道一个很好的和很酷的方式。我希望我已经说清楚了。如果没有,请告诉我。

由于

1 个答案:

答案 0 :(得分:0)

如果从控制器中删除身份验证注释,则可以使用以下命令:

public JsonResult GetSutff(long val, string text) 
{ 
    if (Request.IsAuthenticated)
    { 
        List<string> data = new MyClass().GetDataFromDB(val, text); 
        return Json(data); 
    }else
    {
      // Return empty JSON
    }
}

如果您能找到其他解决方案,请与我们联系。此外,我没有检查,但应该有一种方法来覆盖每个操作方法的身份验证方法,而不是从整个控制器中删除它。

相关问题