使用MVC模块的登录状态验证

登录状态验证是web系统中最常见的一种权限,接下来我们一起来看看怎么做

这里将会使用MVC Action级别的过滤器

规范书写代码,我们先创建一个过滤器的文件夹 ,文件夹里面添加一个londingFilter的普通类:

 类里面使用 Action级别的过滤器要引用using System.Web.Mvc;命名空间和继承 IActionFilter类

using System.Web.Mvc;

 public class londingFilter : IActionFilter
    {


    }

 接下来就是实现接口的方法(tips不实现接口IActionFilter可是会报错的哦)

 直接点击实现接口就OK了。会自动帮你生成代码非常的人性化

生成的代码如下:

 public class londingFilter : IActionFilter
    {
        //控制器执行之后执行
        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            throw new NotImplementedException();
        }
        //控制器执行之前执行
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            throw new NotImplementedException();
        }
    }

 我们要实现的是没登录就不能访问其他页面那么访问规则就是:控制器——页面

即:我们在控制器执行之前执行里面填写为登录的代码:

          //获取登录时候的session  
            Users users = filterContext.HttpContext.Session["user"] as Users;
            if(users==null) {
          //为空就返回登录页面
                filterContext.Result = new  RedirectResult("/londing/index");
            }

接下来配置一下文件:

 里面添加一下那你刚刚写的类

        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new londingFilter());
        }

这个时候运行你会发现一个惊喜:

 这是什么情况:

 这是由于你的疏忽造成的,你想,当你没有登录时,检测到session为空,所以定向到了登录,登录的action被捕获,本应该到登录页面,但是OnActionExecuting要先执行,于是进入死循环了

解脱这个死循环这个时候就需要跳过登录的Action级别的过滤器就OK啦

方法如下

 //filterContext.ActionDescriptor.ControllerDescriptor.ControllerName可以获取控制器的name
 //如果name==登录页面的时候
 if (filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower() == "londing")
            {
                return;
            }
            Users users = filterContext.HttpContext.Session["user"] as Users;
            if(users==null) {
                filterContext.Result = new  RedirectResult("/londing/index");
            }

 这样就OK了:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值