2013-11-03 65 views
2

我正在使用asp.net web api構建一個Http服務,我有兩個get方法在控制器中使用相同的參數,我無法弄清楚如何定義路由匹配這兩種方法,我可以只調用其中一個,對於其他我得到一個錯誤,在控制器上找不到任何操作方法。 這裏有和定義具有相同參數的兩個get方法的Web api控制器

RouteTable.Routes.MapHttpRoute(
     name: "default", 
     routeTemplate: "{controller}/{lang}", 
     defaults: new { lang = System.Web.Http.RouteParameter.Optional }); 
RouteTable.Routes.MapHttpRoute(
     name: "details", 
     routeTemplate: "{controller}/{lang}/{action}/{id}"); 

路由控制器的方法:

public IQueryable<RecipeDTO> Get(string lang) 
{ 

} 

[HttpGet] 
public RecipeDTO Details(string lang, int id) 
{ 

} 

[HttpGet] 
public IQueryable<RecipeDTO> Random(string lang, int count) 
{ 


} 

你看方法的詳細信息,並隨機具有相同的參數,我可以做以下電話:

controller-name/en(與第一個get方法匹配)

controller-name/en/details/1(與詳細方法匹配)

但是當我嘗試:

控制器名/ EN /隨機/ 5

我沒有得到任何行動方法在控制器上發現錯誤,我怎麼能解決這個問題。

在此先感謝

回答

2

的Web API是嚴格有關與參數名稱匹配的路由變量。你可以嘗試改變你的行動以下(這裏我們走樣count參數):

[HttpGet]
public IQueryable<RecipeDTO> Random(string lang, [FromUri(Name = "id")]int count)

相關問題