2012-12-27 85 views
0

我正在使用Visual Studi0 2010.在我的WebApiConfig.cs文件中我有下面的配置文件,我可以映射這兩個URL /Values/Values/1。它工作正常。Asp.net Web API:在控制器上沒有發現任何操作

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new {id= RouteParameter.Optional } 
     ); 

因爲我想喜歡/Values/Machines/Values/Machines/100我的自定義URL,我在上面設置更改如下。

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new {action="get", id= RouteParameter.Optional } 
     ); 

它現在映射到網址以下,除了這一個,/Values/1。請讓我知道我缺少什麼。

1./Values 
2./Values/Machines 
3./Values/Machines/100 

謝謝。

+0

我可以看看你的ValueController嗎? –

回答

2

它是預期的行爲。根據你的新幹線的第一個參數Values有望成爲一個控制器名稱,並有望成爲一個行動第二個參數1,但你沒有名爲1

的行動,以獲取到操作您需要用你的網址新途徑應該像這樣:/Values/Index/1

你可以做這樣的事情:

routes.MapRoute(
    name: "IndexWithParam", 
    url: "{controller}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    constraints: new { id = @"\d+" } 
); 

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

在這種情況下,如果URL是這樣的:/Values/1,它會先出手路線並將其重定向到/Values/Index/1。請注意,我已經對此路線設置了一個約束,以確保第二個參數是一個數字。

+0

謝謝。有沒有辦法達到這個目的?通過更改MapHttpRoute或具有多個MapHttpRoute?請指教。 – APeter

+0

請看更新的答案 – Dmitry

相關問題