2009-12-05 79 views
0

我試圖路由一個沒有靜態行爲的URL,即用戶可以創建可以由任何字符串表示的系統。我想有像下面這樣的URL:MVC高級路由

http://yousite.com/System/WIN1234/Configure

默認的路由機制認爲,WIN1234是行動,而我希望能夠趕上WIN1234,並作出決定哪些方法扔。如在:

public void RouteSystemRequest(string system, string action) 
{ 

    switch (action) 
    { 

    case "Configure": 

     ConfigureSystem(string system); 
     break; 

    } 

} 

我該如何做到這一點?這是合乎邏輯還是我在想這一切都是錯誤的?

回答

1

你需要做的事情是可能的。您需要設置一個指向系統操作的默認路由,並且您需要接受其他值作爲Action的參數。

//General 
    routes.MapRoute(
     "Default7",            // Route name 
     "{action}/{param1}/{param2}",       // URL with parameters 
     new { controller = "Home", action = "Index", param1 = "", param2 = "" } // Parameter defaults 
    ); 

在您的代碼中,您將獲得值Win1234和配置爲默認值。

然後,您可以實現您的切換邏輯並使用RedirectToAction移動到您所需的操作。

+0

我設置了您發佈的代碼,將控制器從主頁更改爲系統。我期望的路線去 SystemsController.Index(字符串id,字符串系統) id = param1,system = param2 我得到一個資源無法找到錯誤。我究竟做錯了什麼? – 2009-12-05 02:59:23

+0

這條路線需要是您序列中的第一條。您設置的控制器也必須有名爲param1或param2的參數。不是系統和身份證。 – 2009-12-05 03:14:17

+0

我希望總體路由結構保持與系統控制器的例外相同。有沒有一種方法可以對路由施加約束,只有在控制器是System時才發送到RouteSystemRequest(string systemName,string action)。即 帳戶/安裝程序仍將遵循默認的控制器=「帳戶」和操作=「設置」,但系統/ WIN1234 /配置將路由到RouteToSystem(字符串systemName,字符串操作) 謝謝! George – 2009-12-09 02:39:28