• MVC过滤器---身份验证过滤器


    身份验证过滤器的用法(一)

    1、首先创建一个自己定义的过滤类继承MVC身份验证过滤类,重写OnAuthorization方法

      public class MyAuthorization:AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                //如果保留如下代码,则会运行.net framework定义好的身份验证,如果希望自定义身份验证,则删除如下代码
                //base.OnAuthorization(filterContext);
    
                //如果希望跳转到另外一个页面,需要使用Result,而不是使用Response.Redirect(),第二种方案不会让服务器端停止执行
                //filterContext.Result=new RedirectResult(UrlHelper.GenerateUrl("","Login","UserInfo",""));
    
                //获取路由数据:当前上下文匹配到路由规则后,得到的一个对象
                //filterContext.RouteData
    
                //获取上下文
                filterContext.HttpContext.Response.Write("123");
            }
        }

    2、在控制器中行为上标记特性,标记的行为会执行过滤器  没标记的不会执行

    [MyAuthorization]:当前行为在执行前,会执行身份验证过滤器
            
            public ActionResult Index()
            {
                throw  new Exception("");
                return View();
            }
           
            public ActionResult Show()
            {
                return View();
            }

    3、控制器中所有的行为都要执行此过滤验证时,在控制器上标记特性

       //[MyAuthorization]//当前控制器下的所有行为,都被应用了这个过滤器
        public class HomeController : MyBaseController//Controller
        {
            //
            // GET: /Home/
            //[MyAuthorization]:当前行为在执行前,会执行身份验证过滤器
            
            public ActionResult Index()
            {
                throw  new Exception("");
                return View();
            }
           
            public ActionResult Show()
            {
                return View();
            }

    4、如果所有的控制器都要执行过滤器验证 则在FilterConfig文件中注册

     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
    
                //在全局中注册过滤器,则所有控制器的所有行为,都会执行这个过滤器
                //filters.Add(new MyAuthorization());
    
            }

    身份验证过滤器的用法(二)

    1、 过滤器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为(该控制器中),不能控制其中的某个行为的执行

     protected override void OnAuthorization(AuthorizationContext filterContext)
            {
                filterContext.HttpContext.Response.Write("456");
            }

    2、如果要做登录验证,在FilterConfig中注册全局的过滤器,登录首页不需要,会死循坏登不进去,用标记特性的方式太累

      可以自己定义一个控制器的类。

     public class MyBaseController : Controller
        {
            //过滤器的第二种实现方式:重写控制器的方法,这样,会应用于所有的行为
            protected override void OnAuthorization(AuthorizationContext filterContext)
            {
                filterContext.HttpContext.Response.Write("456");
            }
    
           
        }

    3、让要实现过滤的控制器继承我们定义的控制器

     public class HomeController : MyBaseController//Controller
        {
            //
            // GET: /Home/
                 
            public ActionResult Index()
            {
                throw  new Exception("");
                return View();
            }
           
            public ActionResult Show()
            {
                return View();
            }
            
        }
  • 相关阅读:
    查询SystemFeature的方法
    【HTML5游戏开发小技巧】RPG情景对话中,令文本逐字输出
    BFS寻路的AS3实现
    超级坑人的Couchbase数据库问题!!!
    java--函数练习
    CentOS 6.2 二进制安装apache2.4.3出现configure: error: APR-util not found. Please read the documentation的解决方
    2017第27周六努力与积累
    2017第27周五
    丢掉生活中的90%,你会收获更多
    《时间简史》笔记摘录
  • 原文地址:https://www.cnblogs.com/Jenkin/p/7536768.html
Copyright © 2020-2023  润新知