2010-07-26 56 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

相關問題