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