2012-11-25 48 views
7

我需要检查一些东西(饼干)为每个请求来到我的应用程序。MVC 3/4 HttpModule或ActionFilter

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

回答

11

MVC是对ASP.NET的一种抽象,因此它们的“钩子”取决于你希望在哪个级别注入逻辑。一个动作过滤器将允许你勾选MVC特定事件:

  • OnActionExecuting - 此方法在执行控制器操作之前调用。
  • OnActionExecuted - 此方法在执行控制器操作后调用。
  • OnResultExecuting - 在执行控制器操作结果之前调用此方法。
  • OnResultExecuted - 此方法在执行控制器操作结果后调用。

而一个HttpModule只允许挂接到ASP.NET(在其MVC建)特定事件:

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

因此,这取决于您何时需要挂钩您的活动以及需要哪些活动。

3

如果HttpModule在您之前运行良好,那么它将继续使用Mvc。

您问题的其他部分范围相当广泛,并且认为您会在asp.net-mvc pipeline and extensibilit y上阅读好文章。

+0

那里有很棒的文章 – Ronnie

2

我用全局动作过滤器做了类似的事情。它工作得很好,并将您的代码集成到您的应用程序中。

当然,HTTP模块的工作原理也是如此,但这意味着将代码从主应用程序中分离出来并单独维护。除非您的代码跨越多个网站或用于多个应用程序,或者需要使用网站表单网站,否则我会使用全局过滤器。