zoukankan      html  css  js  c++  java
  • Mvc校验用户没有登录就跳转的实现

    看字面意思很简单,就是判断用户是否登录了,如果没有登录就跳转到登陆页面。

    没错,主要代码如下(这里就不写判断登录了,直接跳转)

    首先在控制器中新建一个BaseController

    public class BaseController : Controller
    {
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            //这里判断出没有登录然后进行跳转
            Response.Redirect("/Login/Index");
     }}

    正常的控制器 比如 TestController 继承BaseController代码如下

    public class TestController : BaseController
    {
        public ActionResult Index()
        {
            return View();
        }
    }

    如此在直接访问/Test/Index 的时候,由于继承的BaseController中进行了跳转,所以页面会成功的跳转到/Login/Index

    那么至此,大功告成!

    可是如果你真的这么干了,我会毫不夸张的告诉你,你死定了!一点不吓人的告诉你

    为什么呢?

    原因很简单:断点调试发现一个严重的问题,在执行完下列代码之后

    //这里判断出没有登录然后进行跳转
    Response.Redirect("/Role/Index");

    并没有立即跳转到相应页面,而是继续去访问了/Test控制器下的Index方法。

    直至将Test控制器下的Index方法执行完毕,才在浏览器中显示了/Login/Index页面。

    解决方法:

    在跳转的时候,不用Response.Redirect进行跳转

    而是将ActionExecutingContext的Result属性赋值为我们要跳转的地址就OK了!

    如下:

    filterContext.Result = new RedirectResult("/Login/Index");

    如此这般,将不再继续访问Test控制器下的Index方法了!

  • 相关阅读:
    简单计算器(栈和队列的应用)
    01背包问题(dfs+剪枝)
    PAT1057 stack(分块思想)
    算法笔记求序列A每个元素左边比它小的数的个数(树状数组和离散化)
    求序列A中每个数的左边比它小的数的个数(树状数组)
    ubuntu-创建python虚拟环境
    vue-打包
    django-项目目录结构
    接口自动化-常见工具
    selenium-封装一个browser
  • 原文地址:https://www.cnblogs.com/niyl/p/9678865.html
Copyright © 2011-2022 走看看