我想實現多個獲取方法,例如:我可以有多個Get方法在ASP.Net的Web API控制器
獲取(INT ID,用戶userObj)和獲取(INT STOREID,用戶userObj )
是否可以像這樣實現,我不想更改操作方法名稱,因爲在這種情況下我需要在URL中輸入操作名稱。
我正在考慮通過此示例格式'// localhost:2342/' ,其中不包含操作方法名稱。
我想實現多個獲取方法,例如:我可以有多個Get方法在ASP.Net的Web API控制器
獲取(INT ID,用戶userObj)和獲取(INT STOREID,用戶userObj )
是否可以像這樣實現,我不想更改操作方法名稱,因爲在這種情況下我需要在URL中輸入操作名稱。
我正在考慮通過此示例格式'// localhost:2342/' ,其中不包含操作方法名稱。
基本上你不能這樣做,原因是這兩種方法有相同的名稱和完全相同的簽名(相同的參數號和類型),這不會用C#編譯,因爲C#不允許這樣做。
現在,使用Web API,如果您有兩個方法與您的示例(均爲GET)具有相同的操作,並且具有相同的簽名(int,User),當您嘗試從客戶端中擊中其中一個(比如來自Javascript),ASp.NET會嘗試將傳遞的參數類型與方法(動作)進行匹配,並且由於兩者都具有確切的簽名,它將失敗並引發關於歧義的異常。
因此,您可以將ActionName屬性添加到您的方法中以區分它們,或者使用Route屬性併爲您的方法提供不同的路線。
希望有所幫助。
感謝您的建議.... –
請親切看我的[問題](https://stackoverflow.com/questions/46680893/passing-multiple-parameters-to-web-api-get-method) – faisal1208
您需要行動名稱添加到路徑模板以實現ASP.Net的Web API控制器多個GET方法。
WebApiConfig:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional }
);
控制器:
public class TestController : ApiController
{
public DataSet GetStudentDetails(int iStudID)
{
}
[HttpGet]
public DataSet TeacherDetails(int iTeachID)
{
}
}
注:動作/方法名應startwith '獲取',否則別指望你需要指定[ HttpGet]以上動作/方法
爲什麼您將默認路由配置顯示爲解決方案? – Elisabeth
壞的投票。默認的WebAPI路由配置默認沒有動作參數,只是「api/{controller}/{id}」。添加{action}實際上允許多種GET方法,這是OP想要的。 –
忘記他們是第二個行動方法。在課堂上,你不能有這兩種方法。他們有相同的簽名 –
看到這個 - http://stackoverflow.com/questions/15620142/web-api-multiple-get-with-same-signature-routing – Ivan