2014-11-17 79 views
5

我想實現多個獲取方法,例如:我可以有多個Get方法在ASP.Net的Web API控制器

獲取(INT ID,用戶userObj)獲取(INT STOREID,用戶userObj )

是否可以像這樣實現,我不想更改操作方法名稱,因爲在這種情況下我需要在URL中輸入操作名稱。

我正在考慮通過此示例格式'// localhost:2342/' ,其中不包含操作方法名稱。

+2

忘記他們是第二個行動方法。在課堂上,你不能有這兩種方法。他們有相同的簽名 –

+0

看到這個 - http://stackoverflow.com/questions/15620142/web-api-multiple-get-with-same-signature-routing – Ivan

回答

6

基本上你不能這樣做,原因是這兩種方法有相同的名稱和完全相同的簽名(相同的參數號和類型),這不會用C#編譯,因爲C#不允許這樣做。

現在,使用Web API,如果您有兩個方法與您的示例(均爲GET)具有相同的操作,並且具有相同的簽名(int,User),當您嘗試從客戶端中擊中其中一個(比如來自J​​avascript),ASp.NET會嘗試將傳遞的參數類型與方法(動作)進行匹配,並且由於兩者都具有確切的簽名,它將失敗並引發關於歧義的異常。

因此,您可以將ActionName屬性添加到您的方法中以區分它們,或者使用Route屬性併爲您的方法提供不同的路線。

希望有所幫助。

+0

感謝您的建議.... –

+0

請親切看我的[問題](https://stackoverflow.com/questions/46680893/passing-multiple-parameters-to-web-api-get-method) – faisal1208

3

您需要行動名稱添加到路徑模板以實現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]以上動作/方法

+0

爲什麼您將默認路由配置顯示爲解決方案? – Elisabeth

+3

壞的投票。默認的WebAPI路由配置默認沒有動作參數,只是「api/{controller}/{id}」。添加{action}實際上允許多種GET方法,這是OP想要的。 –

相關問題