分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

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

发布时间:2023-09-06 01:12责任编辑:沈小雨关键词: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(); ???????} ???????????}

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

原文地址:http://www.cnblogs.com/Jenkin/p/7536768.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved