【问题标题】:Global action filter in ASP.NET MVCASP.NET MVC 中的全局操作过滤器
【发布时间】:2010-07-26 11:20:50
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

标签: asp.net-mvc-2


【解决方案1】:

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

要做到这一点,您需要在 Global.asax 中为 Application BeginRequest 事件实现一个处理程序。请参阅MSDN documentation 了解更多信息。

更新 - 2010 年 7 月 27 日ScottGu blogged about MVC 3 Preview 1,其中包括一个用于全局过滤器的框架,就像您所说的那样。它们是通过 Global.asax 注册的,可以应用于所有控制器或基于特定标准。

【讨论】:

  • 感谢您的回答。首先我认为它会起作用,但在尝试了这种方法后,我注意到 Application_BeginRequest 获取所有请求,包括对 .js、.css、.jpg 和页面其他资源的请求。因此它会为一页运行多次,并且可能会严重超载。有没有一种简单的方法可以只过滤页面内容的请求并跳过所有 .js、.css、.jpg 请求而不解析请求的 URL?
  • 您可能能够查看来自路由引擎的信息,以确定您是否正在处理控制器/动作。老实说,Adeel 的回答是 正确 方法来做这样的事情,我只是指出如果你想要一个自动的全局处理程序,这是另一种选择。
  • 如果你不想等待 MVC3,我的同事写了一些东西,我们用它来自动匹配过滤器和动作(总是,或者基于条件)。这取决于 IOC 的 Windsor,但您始终可以修改该部分。 geekswithblogs.net/wesm/archive/2009/12/11/ijoined-filter.aspx
【解决方案2】:

创建您自己的基本控制器并从它继承。

【讨论】:

  • 谢谢,它应该可以工作,但我正在寻找一种不需要太多编码的非常简单的方法。
  • @vucetice 你应该更喜欢组合而不是继承
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多