asp.net – MVC 3/4 HttpModule或ActionFilter

我需要为进入我的应用程序的每个请求检查一些内容(Cookies).

在ASP.NET中我们使用HttpModule来完成这个任务,这个问题应该在MVC中使用什么?一些全局过滤器,或者我也可以使用HttpModuler,在MVC和常规ASP.NET之间的Request PipeLine有什么区别吗?

解决方法

MVC是对ASP.NET的抽象,因此它们的“钩子”实际上取决于您想要注入逻辑的级别.动作过滤器将允许您挂钩到MVC特定事件:

> OnActionExecuting – 在执行控制器操作之前调用方法.
> OnActionExecuted – 执行控制器操作后调用方法.
> OnResultExecuting – 在执行控制器操作结果之前调用方法.
> OnResultExecuted – 在执行控制器操作结果后调用方法.

而HttpModule只允许您挂钩到ASP.NET(构建MVC)特定事件:

> BeginRequest – 请求已经开始.如果您需要在请求开始时执行某些操作(例如,在每个页面顶部显示广告横幅),请同步此事件.
> AuthenticateRequest – 如果要插入自己的自定义身份验证方案(例如,针对数据库查找用户以验证密码),请构建一个同步此事件的模块,并以您希望的方式对用户进行身份验证.
> AuthorizeRequest – 此事件在内部用于实现授权机制(例如,将访问控制列表(ACL)存储在数据库中而不是文件系统中).虽然您可以覆盖此事件,但没有太多合理的理由.
> PreRequestHandlerExecute – 此事件在HTTP处理程序执行之前发生.
> PostRequestHandlerExecute – 执行HTTP处理程序后发生此事件.
> EndRequest – 请求已完成.您可能希望构建一个调试模块,该模块在整个请求中收集信息,然后将信息写入页面.

所以这取决于你何时需要挂钩你的活动以及你需要哪些活动.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...