2010-07-26 72 views
5

是否可以创建一个全局动作过滤器,它将自动应用于ASP.NET MVC应用程序中所有控制器中的所有动作?我想要在Ruby on Rails的ApplicationController中定义的“before_filter”。ASP.NET MVC中的全局动作过滤器

谢谢你的帮助。

+0

您可以尝试使用[FluentFilter](http://fluentfilters.codeplex.com/)库。 – 2010-10-21 11:51:24

回答

3

这真的取决于你想用它做什么。在许多情况下,vucetica和Adeel以前的答案将成为您真正想要做的事情。但是,它们都不符合您列出的标准:自动适用于所有操作/控制器

要做这样的事情,你需要为Global.asax中的Application BeginRequest事件实现一个处理程序。有关更多信息,请参阅MSDN documentation

更新 - 2010年7月27日ScottGu blogged about MVC 3预览版1,其中包含您正在讨论的全局过滤器的框架。它们通过Global.asax进行注册,并可应用于所有控制器或基于特定标准。

+0

谢谢你的回答。首先,我认为它会工作,但尝试这种方法后,我注意到Application_BeginRequest获取所有请求,包括对页面的.js,.css,.jpg和其他资源的请求。所以它会在一页中运行多次,可能会造成严重的负载。是否有一种简单的方法来仅过滤页面内容的请求,并跳过所有.js,.css,.jpg请求而不解析请求的URL? – Evgenii 2010-07-27 04:05:06

+0

您可能会查看路由引擎发出的信息,以确定您是否正在处理控制器/操作。老实说,Adeel的答案是这样做的正确方式,我只是指出如果你想要一个自动的全局处理程序,这是另一种选择。 – GalacticCowboy 2010-07-27 11:12:37

+1

如果你不想等待MVC3,我的同事写了一些我们用来自动匹配过滤器和动作(总是或基于条件)的东西。这取决于Windsor的IOC,但您始终可以修改该部分。 http://geekswithblogs.net/wesm/archive/2009/12/11/ijoined-filter.aspx – Ryan 2010-07-30 04:22:05

3

创建您自己的基础控制器并从中继承。

+0

谢谢,它应该工作,但我正在寻找一个非常简单的方法,不需要太多的编码。 – Evgenii 2010-07-27 04:06:17

+2

@vucetice你应该偏爱构图而不是继承 – 2010-09-01 08:31:14

相关问题