【问题标题】:Error on ActionFilterAttribute when AJAX call is made进行 AJAX 调用时 ActionFilterAttribute 上的错误
【发布时间】: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


    【解决方案1】:

    尝试使用您的路线重定向而不是硬编码网址:

    filterContext.Result = new RedirectToRouteResult(
        new RouteValueDictionary(new 
        {
            controller = "Home",
            action = "SessionExpired"
        }
    ));
    

    然后确保SessionExpired 操作与相应的视图一起存在于HomeController 上,并且该操作被命中。显然,由于您在 AJAX 调用中进行重定向,因此您在 AJAX 调用的成功回调中将获得的只是作为参数传递的 SessionExpired 视图的 HTML。不要指望浏览器重定向。您必须使用 window.location.href 手动重定向浏览器。这就是为什么在这种情况下(AJAX)最好返回 Json 结果而不是重定向到会话过期操作的原因。然后在客户端你可以手动执行重定向。

    【讨论】:

    • 我得到了相同的结果(发送到错误页面)。是的,动作和视图存在。它在正常的 GET 或 POST 时有效。只是不在 AJAX 调用中
    • 做到了!我返回了一个 JSON 对象并在 JQuery 中重定向。谢谢!
    猜你喜欢
    • 2020-07-20
    • 2014-02-21
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2017-04-19
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多