所以我得到了一个返回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
}
答案 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;
}