【发布时间】:2012-01-11 14:39:38
【问题描述】:
我正在使用 ActionFilter 来检查用户的会话是否是该用户的最新会话。如果他们已使用另一个会话登录,则旧会话无效。因此,我正在检查每个被调用的操作,如果它们没有使用最新的会话,则将它们注销。我遇到的问题是我的方法不适用于 AJAX 调用。正常的 GET 或 POST 调用工作正常。
public class DuplicateLoginFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = Membership.GetUser(HttpContext.Current.User.Identity.Name);
if (user != null)
{
if (!PortalDA.GetUserSession(user.UserName).Trim().Equals(HttpContext.Current.Session.SessionID))
{
FormsAuthentication.SignOut();
filterContext.Result = new RedirectResult(@"\Home\SessionExprired");
}
}
base.OnActionExecuting(filterContext);
}
我想我解决这个问题的最大问题是我得到一个错误,但我无法在任何地方找到它。
我在 webconfig 中打开了自定义错误。我在所有控制器中都覆盖了 OnException 事件。我还覆盖了 global.asax 中的 Application_Error 事件。
我已经单步执行了代码,当我进行 AJAX 调用时,我返回了 SessionExpired 视图。但是在那之后的某个地方发生了错误,我不能再进一步了。该错误永远不会在被覆盖的错误事件中捕获。然后我会被发送到自定义错误页面。
我怀疑它与 HTTPHeaders 有关,但我对它们了解得不够多,不知道如果是 AJAX 调用如何解决它。
谢谢!
【问题讨论】:
标签: jquery ajax asp.net-mvc-3 model-view-controller action-filter