2014-03-24 27 views
0

我試圖做一個查找控制器與多個獲取操作。 我的路由配置是:簡單的路由問題,可選不工作

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

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "LookupsApi", 
routeTemplate: "api/{controller}/{action}/{id}", 
defaults: new { id = RouteParameter.Optional }); 

我查找控制器是

[HttpGet] 
public LookupsList GetAllStates() 
{ 

} 

[HttpGet] 
public LookupsList GetAllSources() 
{ 
//method 
} 

當我用下面這將給什麼,但錯誤消息:「多的行動中發現匹配的要求,即」

http://localhost:51042/api/lookups/GetAllStates 
or 
http://localhost:51042/api/lookups/GetAllSources 

但是當我使用

http://localhost:51042/api/lookups/GetAllStates/1 
or 
http://localhost:51042/api/lookups/GetAllSources/1 

它會正常工作。

如何設置我的路線以正確工作。

謝謝。

+0

我以前有一個類似的問題:http://stackoverflow.com/q/5591569/284111 –

回答

3

我認爲你的路線有衝突。例如:

http://localhost:51042/api/lookups/GetAllStates 

將匹配第一條路線。

你應該扭轉你的路線的順序:

更新從EdSF

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

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

其他有用的參考資料:

  1. Route order

  2. Route params

+0

通過刪除第一個路徑查找控制器工作正常。但現在第二個控制器不起作用 –

+0

第二個控制器是公開RegistrationModel獲取()和我使用它像API /註冊,但現在它說「你正在尋找的資源已被刪除」 –

+1

把你的默認路線最後在排序,它應該通過。 –