我的问题与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时,它们也会在客户端失败。
我希望用户被重定向到一个会话过期的有点页面,并希望知道一个很好的和很酷的方式。我希望我已经说清楚了。如果没有,请告诉我。
由于
答案 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
}
}
如果您能找到其他解决方案,请与我们联系。此外,我没有检查,但应该有一种方法来覆盖每个操作方法的身份验证方法,而不是从整个控制器中删除它。