asp.net-mvc中的HTTP模块与动作过滤器

Mar*_*tin 18 asp.net-mvc httpmodule action-filter

我正在asp.net MVC3中开发一个应用程序,我有以下问题:我应该何时编写HTTP模块,何时应该编写动作过滤器?

Ana*_*and 30

  1. 过滤器是更多的MVC做事方式而Http模块更多是ASP.NET做事的方式.两者都通过在处理管道中提供钩子来实现类似的目的.

  2. HttpModule更通用,当你想要在每个请求上处理某些事情时.过滤器可用于添加特定于操作的行为.

  3. 如果你希望每个Http请求只执行一次一些事情,你应该使用一个HttpModule.在请求期间,ActionFilter可能会多次执行,除非您检查IsChildActionOn.


Ped*_*uki 8

在请求处理程序执行之前和之后调用HttpModule.它们旨在使开发人员能够拦截,参与或修改每个请求.可以订阅22个可用事件,使模块能够在流程的各个阶段处理请求.这些事件对于希望在引发关键请求管道事件时运行代码的页面开发人员非常有用.如果您正在开发自定义模块并且希望为管道的所有请求调用模块,它们也很有用.

过滤器旨在在MVC请求生命周期之间注入逻辑.特别是在调用de动作之前和之后,以及在处理结果之前和之后.过滤器为用户提供了强大的方法来检查,分析,捕获和监控MVC项目中的一些事情.从MVC5开始,有5种类型的过滤器:

  • 认证
  • 授权
  • 行动
  • 结果
  • 例外

因此,如果要拦截,参与或修改http请求管道中的22个事件中的特定事件,请选择模块.如果您的逻辑与操作方法严格相关,则最好使用服务器覆盖以下ActionFilterAttribute方法之一:

  • OnActionExecuting
  • OnActionExecutted
  • OnResultExecuting
  • OnResultExecuted