C# ActionFilter无法使用AJAX调用

C# ActionFilter无法使用AJAX调用,c#,ajax,asp.net-mvc,action-filter,C#,Ajax,Asp.net Mvc,Action Filter,我有一个对DataTable的AJAX调用,该DataTable正在调用控制器中返回类型为JsonResult的方法。如果用户的会话已过期,我将收到一个JSON错误警报,站点将挂起。我试图使用ActionFilter在处理请求之前检查用户的会话是否已过期。当方法返回类型为ActionResult时,它起作用。但是,当返回类型为JsonResult时,我看到了错误并挂起。在跟踪时,我看到正在调用ActionFilter,代码运行良好,但它不会像应该的那样将用户重定向到登录页面。有没有一种方法可以中

我有一个对DataTable的AJAX调用,该DataTable正在调用控制器中返回类型为JsonResult的方法。如果用户的会话已过期,我将收到一个JSON错误警报,站点将挂起。我试图使用ActionFilter在处理请求之前检查用户的会话是否已过期。当方法返回类型为ActionResult时,它起作用。但是,当返回类型为JsonResult时,我看到了错误并挂起。在跟踪时,我看到正在调用ActionFilter,代码运行良好,但它不会像应该的那样将用户重定向到登录页面。有没有一种方法可以中止服务器端的AJAX调用并按预期重定向用户

动作过滤器

public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContext ctx = HttpContext.Current;
            if (ctx.Session != null)
            {
                if (ctx.Session.IsNewSession)
                {
                    string cookieHeaders = ctx.Request.Headers["Cookie"];

                    if ((null != cookieHeaders) && (cookieHeaders.IndexOf("ASP.NET_SessionId") >= 0))
                    {
                        filterContext.Result = new RedirectResult("~/Account/Login");
                        return;
                    }
                }
            }
            base.OnActionExecuting(filterContext);
        }

我们可以检查请求是否为Ajax,然后返回json结果,并在客户端检查服务器是否返回错误重定向到登录页面,如:

if ((null != cookieHeaders) && (cookieHeaders.IndexOf("ASP.NET_SessionId") >= 0))
{
    if (filterContext.HttpContext.Request.IsAjaxRequest())
    {
            
          filterContext.Result = new JsonResult
          {
              Data = new {Error = "UnAutorized", Url = Url.Action("Login","Account")},
              JsonRequestBehavior = JsonRequestBehavior.AllowGet
          };

          return;
     }
     else
     {
         filterContext.Result = new RedirectResult("~/Account/Login");
         return;
     }
}
现在,对于普通请求,它将重定向到登录页面,对于ajax调用,它将重新发送json响应,其中包含未经授权的错误消息和url,应该重定向到哪里,然后在客户端,我们可以重定向如下:

window.location.href = response.Url;

我不知道有一个请求方法!我对JsonResult做了一些调整,但这解决了我的问题!非常感谢你,伊桑!我为这个问题争论了两天。