這兩天在實現一個WebAPI的服務過程當中遇到了下面的一些問題前端
1, 一個Controller中添加多個Action後端
基於模板建立WebAPI項目後,項目中會自動生成一個ValueController的示例性代碼,api
其中包含幾個以Http標準動做名城Get,Post,Put,Delete等定義的Action模板,並結合路由定義routeTemplate: "api/{controller}/{id}"來提供服務。框架
當向Controller添加了新HttpPost特性的Action時,在進行Post的請求時,會出現500的錯誤,詳細信息以下:測試
{"Message":"出現錯誤。","ExceptionMessage":"找到了與該請求匹配的多個操做: \r\n類型 WebAPI.Controllers.ValuesController 的 ParseValue\r\n類型 WebAPI.Controllers.ValuesController 的 ParseValues","ExceptionType":"System.InvalidOperationException","StackTrace":" 在 System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n 在 System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n 在 System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"}spa
對Asp.net平臺MVC框架項目瞭解的朋友,一會兒就可以定位到是路由定義的問題,經過修改路由爲routeTemplate: "api/{controller}/{action}/{id}".在進行請求測試,一切就正常了。.net
2, 靜態JSON消息接收3d
當一個大粒度的Web服務方法須要接受一些非明確後臺定義格式的數據時,在WebAPI 的Controller的action中,用關鍵字dynamic能夠知足要求。調試
[HttpPost] public void ParseValue(dynamic value) { var person = JsonConvert.DeserializeObject<Person>(value.ToString()); } [HttpPost] public void ParseValues(dynamic value) { var persons = JsonConvert.DeserializeObject<List<Person>>(value.ToString()); }
調試效果以下:blog
前端請求信息
後端獲取信息