WebAPI應用問題整理

這兩天在實現一個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

前端請求信息

 

 

 

後端獲取信息

 

相關文章
相關標籤/搜索