2015-05-16 96 views
-1

我是WebAPI新手,遇到問題。我正在使用包含兩個Get方法的API控制器。一個用於GetAll,而另一個用於基於ID檢索數據。現在我想要做的是實現另一個獲取方法,它需要string並返回記錄。我做了這個方法,並調用它不工作,因爲我的路線是這就像默認API路線:向WebAPI添加自定義方法

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

當我添加了一個新的途徑來調用我的自定義GetMethod

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

我能夠打電話給我的自定義GetMethod,但現在我失去了id參數的寧靜方法。我怎樣才能使用這兩種方法?

+0

我也嘗試使用屬性路由類似[路由(api /控制器名/動作)]在方法的頂部,但它仍然沒有奏效。 –

回答

0

您是否嘗試過只用你的第二個途徑,並呼籲爲

api/customer/get/1 
api/customer/getall/ 
api/customer/getmethod/one 

在上面,客戶是控制器名。你必須替換你的。

請檢查您是否有webapiconfig.cs文件中的路由。請refer這篇文章獲取更多幫助。

+0

我試過這個,我能夠調用api/customer/get/1和api/customer/getall但是對於api/customer/getmethod/one我收到錯誤「{」Message「:」請求無效。「, 「MessageDetail」:「參數字典爲'CustomersProject.Controllers.BaseController'2中的方法'CustomersProject.Models.BaseModel Get(Int32)'包含一個不可爲空的類型'System.Int32'的參數'id' CustomersProject.Models.Customer,CustomersProject.ApiModel.CustomerApiModel]」。一個可選參數必須是一個引用類型,一個可爲空的類型,或者聲明爲一個可選參數。「}」 –

+0

你可能需要有一個類似於第二個的路由,但有一個約束,說id是'串'。如果兩個方法都做同樣的事情,更好的設計是隻有一個GET,並且客戶端將字符串ID轉換爲int id並調用單個get方法。 –

+0

問題是,當我添加一個路由到web.config我必須將該路由放置在默認路由之上然後我失去了寧靜的服務,我希望id方法被稱爲api/customer/1,getall方法是api /客戶和我的搜索方法爲customer/get/kashif,其中kashif是搜索的名稱。 –

0

最好不要改變路線。 您可以使用操作名稱來區分呼叫,並可以添加更多功能。看看這個答案: How to add custom methods to ASP.NET WebAPI controller?

+0

我改變了我的路線爲默認值,讓我的方法是這樣的...... [ActionName(「搜索」) [HTTPGET] 公共虛擬BaseModel獲取(字符串名稱){ 返回 新BaseModel(){成功= true}; }並調用像這樣的api/customer/search,但它仍然不起作用 –