2012-06-14 45 views
0

在我工作的地方,我們爲使用WebForms的內部Web應用程序提供了自定義安全/身份驗證機制。現在我們正在ASP.NET MVC 3中開發,並且想要擴展Controller類來支持這一點,就像我們對WebForm的Page類所做的那樣。然後我們將這個包裝到一個自定義的共享DLL中。擴展MVC控制器類,沒有版本依賴關係

我想知道如何安全的,這是與MVC的未來版本的兼容性方面。 如果ASP.NET MVC 4.0明年推出,我們的自定義控制器類(引用ASP.NET MVC 3.0控制器類)仍然可以在MVC 4.0應用程序中工作?

有沒有辦法以某種方式延長Controller不依賴於特定於MVC的版本?


不是這樣的重複:Extending Asp.NET MVC3 Controller Class

+0

是的,你必須升級你的公共庫爲每個版本'System.Web.Mvc'沒有辦法解決它,除非你有沒有參考MVC的...這似乎不是很有用。 – dotjoe

+0

因此,我需要爲每個Mvc版本安裝MySharedLibrary.Mvc3,MySharedLibrary.Mvc4,... – Meryovi

+0

這將是一種方法...是否是一個問題?如果下一個版本有一個你想要利用的新功能會怎麼樣? – dotjoe

回答

1

的問題是從「控制器」類,你需要首先添加到Sytem.Web.Mvc參考這是特定版本繼承。

ASP.NET MVC的每個版本都會有它自己的DLL。您將無法在MVC 4項目中使用爲ASP.NET MVC3設計的客戶DLL。

現在,您可以創建一個從Controller入手並將其包含在您的ASP.NET MVC項目中的類,然後隨着項目版本的變化,對「Controller」的引用也會這樣,但那只是因爲您的項目引用了版。

+0

我想對於ActionFilterAttributes也是一樣的嗎? – Meryovi

+0

大部分,是的。爲了插入或擴展一個動作過濾器,你需要一個對MVC DLL的引用。雖然ASP.NET MVC2有相當數量的代碼可以在MVC3中重複使用,但是它們並不直接兼容。 –

0

不太你問什麼,但如果您使用的是自定義的安全/認證機制,你最好重寫AuthorizeAttribute這控制對所有控制器的訪問。

也有很多例子,在那裏進行自定義驗證過。從自定義控制器派生可能會導致潛在的安全問題,因爲有人忘記添加基類 - 將AuthorizeAttribute應用於應用程序啓動中的所有控制器是正常的。

有關此方法的詳細信息,請參閱here

對於非安全相關的共享方法,可以實現這些作爲一個IController擴展方法,而不是擴展基類本身,除非您特別需要重寫任何東西在控制器基類中。

+0

我們已經爲應用程序做過一次,並且它非常適合我們的需求。我們只是想把我們所做的所有事情放在共享DLL中供其他應用程序使用。我們還實現了一個自定義屬性,但我們需要在所有控制器中使用一些共享方法 – Meryovi

+0

如果您使用的是共享方法,那麼可能更好的辦法是針對IController編寫擴展方法。這樣,您不需要從自定義控制器派生,但您的共享方法仍然可用。 – Richard

+0

我不需要爲此導入「System.Web.Mvc」嗎? (因此有版本依賴)? – Meryovi