我需要检查来自我的应用程序的每个请求的一些内容(Cookies)。
在ASP.NET中我们使用HttpModule来完成这项任务,这个问题应该在MVC中使用什么?一些全局过滤器,或者我也可以使用HttpModuler,在MVC和常规ASP.NET之间的Request PipeLine有什么不同吗?
答案 0 :(得分:11)
MVC是对ASP.NET的抽象,因此它们的“钩子”实际上取决于您想要注入逻辑的级别。动作过滤器将允许您挂钩MVC特定事件:
OnActionExecuting
- 在执行控制器操作之前调用此方法。 OnActionExecuted
- 执行控制器操作后调用此方法。 OnResultExecuting
- 在执行控制器操作结果之前调用此方法。OnResultExecuted
- 执行控制器操作结果后调用此方法。而HttpModule只允许您挂钩到ASP.NET(构建MVC)特定事件:
BeginRequest
- 请求已经开始。如果您需要在请求开始时执行某些操作(例如,在每个页面顶部显示广告横幅),请同步此事件。AuthenticateRequest
- 如果要插入自己的自定义身份验证方案(例如,针对数据库查找用户以验证密码),请构建一个同步此事件并对用户进行身份验证的模块。你想要的方式。AuthorizeRequest
- 此事件在内部用于实现授权机制(例如,将访问控制列表(ACL)存储在数据库中而不是文件系统中)。虽然您可以覆盖此事件,但没有太多合理的理由。PreRequestHandlerExecute
- 此事件在HTTP处理程序执行之前发生。PostRequestHandlerExecute
- 此事件在HTTP处理程序执行后发生。EndRequest
- 请求已完成。您可能希望构建一个调试模块,该模块在整个请求中收集信息,然后将信息写入页面。所以这真的取决于你何时需要挂钩你的活动以及你需要哪些活动。
答案 1 :(得分:3)
如果HttpModule在此之前效果很好,那么它将继续使用Mvc。
你问题的其他部分范围很广,并且认为你也可以在asp.net-mvc pipeline and extensibilit y阅读一篇好文章。
答案 2 :(得分:2)
我使用全局动作过滤器做了类似的事情。它运行良好,并将您的代码集成到您的应用程序中。
当然,HTTP模块也可以正常工作,但这意味着要从主应用程序中分离代码并单独维护它。除非您的代码跨越多个站点或用于多个应用程序,或者需要使用Web表单站点,否则我将使用全局过滤器。