xi_de 2016-01-29 10:58 采纳率: 13%
浏览 2028

mvc4中ajax请求重定向问题

在mvc4中我有一个过滤器 在每一个action前都会先调用一次,里面的方法是用来判断用户是否登录如果是程序发出的请求还好可以重定向到登录页面 但ajax 的请求就无法重定向,我现在有一个解决方法但是 还是不完美

这是我的过滤器,如果是ajax的请求就在浏览器头部设置一个标记

  protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {


           if (UserInfo == null)
            {
               //如果是Ajax  请求的  要特殊处理
                if (HttpContext.Request.IsAjaxRequest())
                {
                    //添加头部信息 前端会有ajax回调 判断
                    Response.AddHeader("sessionstatus", "timeout");

                    return;
                }
                else
                {
                    //正常的请求
                    filterContext.Result = new RedirectToRouteResult(
                       "Default",
                       new RouteValueDictionary(
                           new
                           {
                               controller = "Login/Login",
                               action = "Login"
                           }));
                }
            }
            else
            {
                base.OnActionExecuting(filterContext);
            }


        }

如果标记是ajax的就 在我的js 里设置一段全局的 js代码 如果是标记的 就用js 来定向 登录页面


/**
 * 设置未来(全局)的AJAX请求默认选项
 * 主要设置了AJAX请求遇到Session过期的情况
 */
$.ajaxSetup({
    type: 'POST',
    complete: function (xhr, status) {
        var sessionStatus = xhr.getResponseHeader('sessionstatus');
        if (sessionStatus == 'timeout') {

            //var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录.');
            //if (yes) {
                window.location.href = '/Login/Login/Login';
           // }
        }
    }
});


那么问题来了 我这里 设置完标记后 js也重定向了 但是 我请求的 query 这个查询方法 必须要 全部执行完 才重新定向登录页面

下面这个 方法会执行

 public string Query()
        {
            //string BeginDate = Request.Form["BeginDate"];
            //string EndDate = Request.Form["EndDate"];
            string MemberNO = Request.Form["MemberNo"];
            string MemberName = Request.Form["MemberName"];
            int pageIndex = Request.Form["page"] != "" ? Convert.ToInt32(Request.Form["page"]) : 0;
            int pageSize = Request.Form["rows"] != "" ? Convert.ToInt32(Request.Form["rows"]) : 0;

            StringBuilder WhereCode = new StringBuilder(" CompanyID = "+this.UserInfo.CompanyID);
            //if (!string.IsNullOrEmpty(BeginDate))
            //{
            //    WhereCode.Append(" AND  (RegisterDate >= '" + BeginDate + "')");
            //}
            //if (!string.IsNullOrEmpty(EndDate))
            //{
            //    WhereCode.Append(" AND  (RegisterDate <= '" + EndDate + "')");
            //}
            if (!string.IsNullOrEmpty(MemberNO))
            {
                WhereCode.Append(" AND MemberNo ='" + MemberNO + "'");
            }
            if (!string.IsNullOrEmpty(MemberName))
            {
                WhereCode.Append(" AND MemberName like '%" + MemberName + "%'");
            }
            WhereCode.Append(" AND (Status = 'A') AND (MemberType = '01')");

            MemberService memberInfo = new MemberService();
            string json = memberInfo.GetMemberInfo(WhereCode.ToString(), pageIndex, pageSize);
            return json;
        }

不是 谁有好的解决方案 如果我是ajax 的请求 就让请求 不继续 执行 直接重定向

  • 写回答

2条回答

  • threenewbee 2016-01-29 13:37
    关注

    ajax没法服务器重定向,你需要在你的js客户端得到返回的httpstate,如果是301/302,再发新的请求到新的地址。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题