APS.NET MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理。这时候就用到了过滤器。

自定义过滤器:

若要自定义一个过滤器,则要继承ActionFilterAttribute类,这个类是一个抽象类,实现了IActionFilter和IResultFilter接口,主要通过重写四个虚方法来达到在行为方法执行和返回的前后注入逻辑。

方法

参数

描述

OnActionExecuting

ActionExecutingContext

在行为方法执行前执行

OnActionExecuted

ActionExecutedContext

在行为方法执行后执行

OnResultExecuting

ResultExecutingContext

在行为方法返回前执行

OnResultExecuted

ResultExecutedContext

在行为方法返回后执行

我们新建一个MVC空项目,在根目录下面新建文件夹Filter,存放我们的自定义过滤器,添加MyCustormFilter类,继承ActionFilterAttribute并重写里面的虚方法,来满足前前后后需要处理的逻辑问题。

    public class MyCustormFilter:ActionFilterAttribute{// 摘要: //     在执行操作方法后由 ASP.NET MVC 框架调用。//// 参数: //   filterContext://     筛选器上下文。public override void OnActionExecuted(ActionExecutedContext filterContext){filterContext.HttpContext.Response.Write("OnActionExecuted > 在执行操作方法后由 ASP.NET MVC 框架调用<br/>");base.OnActionExecuted(filterContext);}//// 摘要: //     在执行操作方法之前由 ASP.NET MVC 框架调用。//// 参数: //   filterContext://     筛选器上下文。public override void OnActionExecuting(ActionExecutingContext filterContext){filterContext.HttpContext.Response.Write("OnActionExecuting > 在执行操作方法之前由 ASP.NET MVC 框架调用<br/>");base.OnActionExecuting(filterContext);}//// 摘要: //     在执行操作结果后由 ASP.NET MVC 框架调用。//// 参数: //   filterContext://     筛选器上下文。public override void OnResultExecuted(ResultExecutedContext filterContext){filterContext.HttpContext.Response.Write("OnResultExecuted > 在执行操作结果后由 ASP.NET MVC 框架调用<br/>");base.OnResultExecuted(filterContext);}//// 摘要: //     在执行操作结果之前由 ASP.NET MVC 框架调用。//// 参数: //   filterContext://     筛选器上下文。public override void OnResultExecuting(ResultExecutingContext filterContext){filterContext.HttpContext.Response.Write("OnResultExecuting > 在执行操作结果之前由 ASP.NET MVC 框架调用<br/>");base.OnResultExecuting(filterContext);}}

我们新建Home控制器,并且新增Index视图,在Home控制器的Index方法上加上过滤器,代码如下:

 public class HomeController : Controller{//// GET: /Home/[MyCustormFilter]public ActionResult Index(){return View();}}

过滤器经常用于权限过滤,登录状态控制过滤,异常处理过滤器。

自定义过滤器中的全局过滤器:

修改Global.asax中的代码如下:

    // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,// 请访问 http://go.microsoft.com/?LinkId=9394801public class MvcApplication : System.Web.HttpApplication{protected void Application_Start(){AreaRegistration.RegisterAllAreas();WebApiConfig.Register(GlobalConfiguration.Configuration);//FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);}//添加全局过滤器public static void RegisterGlobalFilters(GlobalFilterCollection filters){filters.Add(new Filter.MyCustormFilter());}}

添加Son页面,运行程序:在每一个控制器中执行的Action方法都先经过全局过滤器。

【MVC-自定义过滤器】相关推荐

  1. asp.net MVC之 自定义过滤器(Filter)

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  2. MVC之 自定义过滤器(ActionFilterAttribute)

    一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttribute类的方法签名. //表示所有操作 ...

  3. MVC中的自定义过滤器

    过滤器的类型 ASP.NET MVC 框架支持以下几种过滤器:     1.Authorization 过滤器– 实现了 IAuthorizationFilter 接口.这一类的过滤器用来实现用户验证 ...

  4. ASP.NET MVC ActionFilter自定义过滤器异常过滤器过滤器用法

    自定义过滤器使用非常灵活,可以精确的注入到请求前.请求中和请求后.继承抽象类ActionFilterAttribute并重写里面的方法即可: public class SystemLogAttribu ...

  5. SpringMVC配置自定义过滤器

    SpringMVC配置自定义过滤器 环境 开发工具: idea2019.3.5 springmvc版本: 5.1.9.RELEASE <dependency><groupId> ...

  6. [转]MVC之 过滤器(Filter)

    [转]MVC之 过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  7. 【AngularJS】—— 9 自定义过滤器

    AngularJS另一个特点就是提供了过滤器,可以通过操作UNIX下管道的方式,操作数据结果. 通过使用管道,可以便于双向的数据绑定中视图的展现. 过滤器在处理过程中,将数据变成新的格式,而且可以使用 ...

  8. springboot过滤字段_SpringBoot自定义过滤器的两种方式及过滤器执行顺序

    第一种 @WebFilter + @ServletComponentScan 注解 1.首先自定义过滤器 如下自定义过滤器 ReqResFilter必须实现  javax.servlet.Filter ...

  9. Django 框架13: 自定义过滤器和标签

    2019独角兽企业重金招聘Python工程师标准>>> Django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足开发要求,如果觉得需更精准的模板标签或者过滤器,可以自 ...

  10. 2.选择元素 - 自定义过滤器《jquery实战》

    2.5.6 自定义过滤器 jQuery 中有两种方法创建自定义的过滤器.第一种比较简单,但是不鼓励,从 jQuery 1.8 开始已经被第二种方法取代.记住,使用新方法时,你自定义的过滤器在 jQue ...

最新文章

  1. opencv中LUT函数实现颜色空间缩减
  2. 中国、意大利等国研究员用AI 发现新的月球陨石坑 | AI日报
  3. 征战蓝桥 —— 2014年第五届 —— C/C++A组第9题——斐波那契
  4. 为什么苹果内购总是失败_苹果官网送货流程将改革,最快次日达丨iPhone6s 等钉子户终于要换手机了...
  5. (转)HttpURLConnection与 HttpClient 区别
  6. KMP 串的模式匹配 (25 分)
  7. java中的算数运算符号用法与原理分析
  8. MTK:文件操作接口详解
  9. atitit.二进制数据无损转字符串网络传输
  10. 汇编语言王爽实验十三
  11. 在文华财经赢顺云W6和赢顺云手机随身行中如何导入需要的指标
  12. java socket中文编码_Java Socket 中的编码问题
  13. Java培训后如何找工作?
  14. 计算机操作系统的主要功能
  15. 线性代数笔记33——基变换和图像压缩
  16. 【论文笔记】Bullseye Polytope: A Scalable Clean-Label Poisoning Attack with Improved Transferability
  17. 字节跳动 校招薪资曝光,老员工被倒挂疯了~
  18. Executors.newFixedThreadPool(int threads)和Executors.newCachedThreadPool()
  19. (Talking face) EVP
  20. 前后缀匹配问题kmp

热门文章

  1. 编写程序把24小时制的时间改成12小时制
  2. findContours函数详细解析
  3. 深圳大学计算机专硕就业工资,深大毕业研究生初次就业薪酬平均月薪广东第一,十年后是全国两倍...
  4. 网管型工业交换机的应用优势
  5. 分布式数据库CAP原理
  6. microduino实现红外线发送与接收
  7. Refactor反编译C#程序
  8. java阅读安卓_基于安卓Android的图书阅读与推荐系统APP的设计
  9. Java并发编程艺术
  10. 单光感pid巡线_技术解析——单颜色传感器巡线中的PID控制器