Mvc校验用户没有登录就跳转的实现

来源:互联网 发布:衡阳网络推广 编辑:程序博客网 时间:2024/06/05 14:10

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

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

首先在控制器中新建一个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进行跳转

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

如下:

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

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

0 0
原创粉丝点击