2011-03-08 23 views
3

我有這個網址:如何使用ASP.NET MVC路由設置RESTF URL?

/controller/action/value

,因此這個動作:

public ActionResult Get(string configName,string addParams) 
{ 
} 

如何設置我的路由表來獲取路由引擎值綁定到configName參數的任何行動在Config控制器中?

+0

關於可選參數,您使用哪個版本的MVC來做到這一點? – Tr1stan 2011-03-08 13:16:04

+0

asp.net mvc 3 .. – user256034 2011-03-08 13:50:13

+1

僅供參考,沒有什麼RESTFUL關於漂亮的網址。 – 2011-03-09 13:26:31

回答

2
routes.MapRoute(
     "ValueMapping",            
     "config/{action}/{configName}/{addParams}",   
     new { controller = "Config", action = "Index", configName= UrlParameter.Optional, addParams = UrlParameter.Optional } // Parameter defaults); 

設置默認控制器首頁,與指數

的默認操作這樣的網址: /config/get/configNameValue/AddParamValue

會匹配這個方法:

public ActionResult Get(string configName,string addParams) 
{ 
//Do Stuff 
} 
+0

我想這適用於整個應用程序,但我只需要Config控制器。 – user256034 2011-03-08 12:59:06

+0

@ user256034 - 查看我的更新 – Tr1stan 2011-03-08 13:01:31

5

那麼,首先,這是不完整的。您沒有方法名稱。

其次,將已經與格式的網址的工作:

/控制器/動作配置名稱= foo的& addparams =酒吧

下面介紹如何用漂亮的途徑做到這一點:?

routes.MapRoute(
     "YourMapping",            
     "{controller}/{action}/{configName}/{addParams}"); 

routes.MapRoute(
     "YourMapping",            
     "{controller}/{configName}/{addParams}",  
     new { 
      controller = "YourController", 
      action = "YourAction" 
     }, 
     new { 
      controller = "YourController" // Constraint 
     }); 

,如果你想排除來自URL的動作。

+0

Ups,我添加了動作名稱。是的,我知道,但我想要的URL像/ config/get/value。第二個參數是可選的。 – user256034 2011-03-08 12:58:23

3

你可以添加一個新的高於默認路線

routes.MapRoute(
    "Config", 
    "config/{action}/{configName}/{addParams}", 
    new { controller = "Config", action = "Index" } 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

這將允許您使用路線/config/actionName/configName/addParamsValue。你的其他路線應該不受此影響。