2015-09-07 97 views
1

使用Web API時,遇到從客戶端調用GET方法時的情況。Web API控制器中的多個GET方法

//This didn't worked 
public IEnumerable<type> Get(string mode) 
{ 
    //Code 
} 

//This worked 
public IEnumerable<type> Get(string id) 
{ 
    //Code 
} 

只改變參數的名稱使我的調用成功。我正在使用默認路由。

該方法有什麼問題。如果我想要一個具有多個參數的GET方法,該怎麼辦?例如:

pulbic string GET(string department, string location) 
{ 
    //Code here 
} 

回答

1

我需要看到調用代碼和路由配置是肯定的,但我的猜測是,您可能正在使用寧靜的路由。切換到使用查詢字符串,命名參數和所有的方法應該工作:

http://api/yourcontroller?id=something

http://api/yourcontroller?mode=somethingelse

http://api/yourcontroller?department=adepartment&location=alocation

默認路由模板配置明白ID。您可能會在WebApiConfig靜態類方法Register的App_Start文件夾中看到這一點。

這是默認:

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

基於該默認情況下,動作方法參數(ID)設定爲路線數據這就是爲什麼在控制器代碼的第二動作方法你上面列出的一部分會工作。您將無法使用模板路由或屬性路由來爲同一控制器中的多個單參數獲取方法設置get值,因爲它會創建一個模糊的條件。

您可能想在以下鏈接查看參數綁定的詳細信息。在Web Api 2中綁定可能有點棘手,因爲默認包含的模型綁定器和格式化器在幕後執行了大量工作。

http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

+0

ThanxBlll,它真的聽起來是對問題的解釋。該鏈接真的很有幫助。 –

相關問題