Asp.Net Core 配合vue Session丢失跳转登录页面 80C

在BaseController中一个拦截器发现session丢失后想回馈给前端session丢失跳转登录页

跨域 前后端分离

public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var isDefined = false;
            //创建一个行动限制ActionDescriptor
            var controllerActionDescriptor = filterContext.ActionDescriptor as ControllerActionDescriptor;
            //执行方法是否存在NoPermissionRequired
            if (controllerActionDescriptor != null)
            {
                isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true).Any(a => a.GetType().Equals(typeof(NoPermissionRequiredAttribute)));
            }
            //判断是否拦截
            if (isDefined) return;
            byte[] result;
            //获取session
            filterContext.HttpContext.Session.TryGetValue(KeyUtil.user_info, out result);
            //判断session是否存在
            if (result == null)
            {

                //在此处如何让vue能跳转到登录页
                return;
            }
            base.OnActionExecuting(filterContext);
        }

2个回答


//这里就给你写个ajax的axios自己百度把,结帖给分
 ajax1=$.ajax; 
$.ajax=function(cfg){
    //将原ajax 中的success方法保存为_success
    cfg._success=cfg.success;
    cfg.cache=false;
     //重写ajax的success方法
    cfg.success=function(res){
        if('string'==typeof(res)){          
         if(res=="jump")
        {
        $(location).attr('href', 'http://www.baidu.com');
        }

        } 
            //如果我们在前面没有return,在这里我们将后台
            //返回的数据重新放入原先ajax
        if(cfg._success!=null)
        cfg._success(res);
    }
    ajax1(cfg);
}

PCYaoYao
PCYaoYao 回复無耐: 给你写个例子,我修改下我的回答
4 个月之前 回复
PCYaoYao
PCYaoYao 你是用axios还是ajax? ,不管你用什么了 你写个扩展方法返回指定字符就执行跳转
4 个月之前 回复
u013895251
無耐 回复PCYaoYao:可能我表达错了,我的意思是外面随意请求一下都会被拦截如果session丢失应该跳转到登录页,但是我现在拦截中不知道如何在跨域情况下让vue页面跳转
4 个月之前 回复
PCYaoYao
PCYaoYao 回复無耐: 主动推送你要做双工通信的,行了结帖把 你这个还是写个接口让他一直循环请求把
4 个月之前 回复
u013895251
無耐 对是主动推送
4 个月之前 回复
filterContext.Result = new RedirectToRouteResult(跳转控制器)
比如说
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
  ontroller = "Account",
  action = "Login"
}));
u013895251
無耐 现在是跨平台了前后端分离的这个形式行不通吧
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问