2017-06-09 181 views
0

我有一個MVC 4(目前是反正)我想提供給許多客戶的網站。 我以爲我有聰明的想法,並會創建自定義控制器,然後根據參數或其他選擇使用哪個。MVC路由/動態控制器

每個客戶都有自己的安裝,因此要在編譯時選擇使用的控制器,而不是理想的運行時間。

所以這個想法是爲每個客戶創建一個控制器,例如, Customer1Controller,Customer2Controller等,然後映射它,所有的客戶將使用http://myserver/Customer

我試圖將所有Customer/{action}映射到Customer1/{action},但我無法找到映射一個語句中的所有操作,並且每個操作都有一個看起來有點難看。

我的第一個想法是嘗試使用依賴注入,但作爲具體類用於顯然不是一個選項的控制器。它也有其他一些缺點。

實際的問題是;無論如何要做一個「全部捕捉」行動?事情是這樣的:

 routes.MapRoute(
      name: "Import", 
      url: "Customer/*/{id}", 
      defaults: new { controller = "Customer1", action = *, id = UrlParameter.Optional } 
     ); 

Thanks./H

回答

2

實際的問題是,無論如何要做一個「全部捕捉」行動?

是的。默認路由就是一個很好的例子。

routes.MapRoute(
     name: "Import", 
     url: "Customer/{action}/{id}", 
     defaults: new { controller = "Customer1", id = UrlParameter.Optional } 
    ); 

這將構建路徑值字典與來自URL的操作名稱,因此它可以是「Customer1」控制器上的任何操作。

這就是說,你的問題不清楚。控制器動態。除非您在每個客戶控制器上採取了截然不同的操作,否則沒有理由需要爲每個客戶創建一個控制器。

或者,如果您要做的是允許客戶創建自己的URL,則可以使用custom RouteBase subclass來完成。

底線是有很多方法來定製URL,但它們不涉及注入「動態控制器」,它們利用路由動態地將請求發送到特定的控制器動作。

+0

因爲我測試了這個組合,所以總是路由到Index.default動作。但它現在很好用,非常感謝。 我有一個網站是爲客戶定製的。因此,爲該部分使用不同的控制器的想法(因爲我使用DI來選擇業務邏輯的類),但是不可能或考慮它的一個好主意。有些操作將會不同,我想避免有多個if語句的其他.. – VikingIT