我在前台发送一个ajax请求时 [AuthorizationFilter]
  public ActionResult GetListWithPager(GridPager pager)AuthorizationFilter实现如下 public class AuthorizationFilter : ActionFilterAttribute
    {
                public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                if (filterContext.HttpContext.Session["User"] == null)
                {
                    filterContext.Result = new RedirectResult("/user/user/login");
                    我想实现如果用户没有登录 转到登录 页页
                    这里的代码应该怎么写。。
                    Ajax请求无法实现转向
                }
            }
        }
    }
请问ajax请求时,,没有验证通过 。。怎么在后台实现页面转向。。转到登录页面

解决方案 »

  1.   

    在过滤器中统一设定返回值为UnAuthority,写一个js的重定向方法Redirect
    然后在Ajax请求的OnSuccess方法中判断如果返回值为UnAuthority,调用js重定向方法
    function Redirect()
    {
      document.href.location='/Login';
    }
      

  2.   

    我是这样做的
    if (filterContext.HttpContext.Request.Headers["X-Requested-With"] != null)
                {
                    filterContext.Result = new JsonResult { Data = new JsonClass { Message = "您没有权限", Success = false } };
                }
                else
                {
                    filterContext.Result = new RedirectResult("/Out/LogOut");
                }
    前台的AJAX都是调用我写的一个JS方法,这个方法返回的都是JSON,
    json: function (url, value, fun, err) {
            //封装的Ajax操作
            $.ajax({
                type: 'POST',
                url: url,
                processData: false,
                dataType: 'json',
                data: value,
                success: function (data) {
                    if (data.Success == false) {
                        top.location.replace("/Oa/Me?msg=");
                       // top.location.href = "/Oa/Me?msg=";
                    } else {
                        fun(data);
                    }
                },
                error: function () {
                    if (err)
                        err();
                    else {
                        $.window.loagingClose();
                        $.dialog.alert("请求的操作出错,可能原因:<br>1.网络不稳定,2.系统错误,3.没有相应的权限。<br>请检查后重试!");
                    }
                }
            });
        }
    能实现超时跳转,如果你找到了更好的方法,也请分享下
      

  3.   


    你这种思路我懂。。但是我每个AJAx请求都要去调用你这个方法吗?
    我觉得好麻烦哦。。有没有某种处理方式能够集中处理Ajax返回的信息的方法。。在这个方法里面实现页面跳转。。因为我们的项目 里面基本都是ajax请求。。每次都要去做判断是否过期。。很麻烦。。
      

  4.   

    在文档流里面写入<script>xxxx()</script>调用页面的js执行跳转就可以了xxxx()是你的js函数 要指定跳转的话就传递一个参数就可以了撒
      

  5.   

    这样要看AJAX返回的内容来决定是否要跳转。
      

  6.   

    filterContext.HttpContext.Response.Redirect("/URL");