我遇到以下问题:当我的会话过期并且用户点击Ajax.Actionlink时,登录页面返回为部分页面
答案 0 :(得分:2)
创建一个实现IAuthorizationFilter的ActionFilterAttribute
并在OnAuthorization中检查用户是否已注销,
如果他已注销并且这是一个Ajax请求(filterContext.HttpContext.Request.IsAjaxRequest()) - 将filterContext.Result设置为不同的结果。
我用HttpStatusCode.Unauthorized返回一个结果
所以我可以在客户端挂钩并做出相应的反应
从未使用Ajax.Actionlink,我使用jQuery进行所有Ajax调用,并使用全局钩子来捕获错误状态代码的结果
答案 1 :(得分:1)
你的动作方法
最需要这样的东西 if (Session["UserID"] == null && Request.IsAjaxRequest())
{
return Content("<div class=\"error\">Your session was expired. Press Logout and then login again to continue</div>");
}
<强>更新强> (您需要在检查授权时指定它,无论您创建什么机制)
public ActionResult Index()
{
try
{
List<string> rights = objAuthorization.CheckMemberRightsOnPage("page1");
if (!rights.Contains("View"))
{
if (Session["UserID"] == null && Request.IsAjaxRequest())
{
return Content("<div class=\"error\">Your session was expired. Press Logout and then login again to continue</div>");
}
return RedirectToAction("Restricted", "UserLogin", new { url = HttpUtility.HtmlEncode(Request.Url.AbsolutePath.Substring(1)) });
}
ViewData["objAuthorization1"] = rights;
// your other things here
}
catch(Exception ex){
ViewData["ErrorMessage"] = "An error occurred: " + ex.Message;
return View(); }
}