ASP.NET WebAPI String 传值问题
如果我們再WebAPI中定義了只有一個string參數的WebAPI函數,如下所示:
?
[HttpPost] public string TrackBill(string str){return str;} 就是這樣一個簡單的函數,有一個字符串類型的參數,?
當我們用PostMan對該API進行測試,給api接口傳一個Key為str,value為123的鍵值對。
其結果如下:
我們看到,返回的結果是找不到與該請求匹配的資源。很奇怪,我們的給該方法指定了HttpPost的方法,也指定了參數名為str的參數,請求的方法是post方法,參數也是str,卻匹配不到該函數。
1.第一步。
給string str加上[FromBody]進行修飾。
如下所示。
?
[HttpPost]public string Post([FromBody]string str){return str;}我們在在postman中用同樣的方法進行post訪問。
?
?
返回值為null 也就是說匹配到了webapi中的post方法,但是該方法根本沒有接收到postman中傳遞過去的key 為str? Vaue為123的值。
2.第二步
查閱相關資料后,得出結論,原來當方法中只有一個string類型的參數時,不能給該鍵值對賦予key值,也就是說key必須得空著。
如下所示。
我們在postman中把key空著,然后value為123,結果webapi中的post函數成功獲取到了改值。
不知道微軟在這樣設計的時候出于什么考慮。
3.第三步。
post函數兩個string類型的參數。填加post的重載方法,如下:
?
? [HttpPost]public string Post([FromBody]string str1, [FromBody]string str2){return string.Format("第一個str是:{0},第二個str是{1}",str1,str2);} 我在在postman中和上例一樣,不指定key,然后指定兩個value,看看結果會怎樣??
當兩個key都是空著的時候,出現錯誤,提示,“無法將多個參數(“str1”和“str2”)綁定到請求的內容。”
也就是說多個string參數,那么key不能空著,我們加上試試。
結果讓人很意外,任然是不可以。
4.第四步,
那么,當有多個string類型的參數怎么辦呢?
我想到的解決辦法是用object類型取代string類型。
更改如下:
?
public class HomeController : ApiController{[HttpPost]public string Post(Str str){return string.Format("第一個str是:{0},第二個str是{1}",str.Str1,str.Str2);}}public class Str{public string Str1 { get; set; }public string Str2 { get; set; }} 然后我們在postman 訪問試試。我們看到,成功收到了str1和str2的值。
?
5.第五步
其實還有更簡單暴力的辦法,在路由中通過url中給參數指定值。
代碼如下:
?
[HttpPost][Route("~/Post/{Str1}/{Str2}")]public string Post(string Str1,string Str2){return string.Format("第一個str是:{0},第二個str是{1}",Str1,Str2);}然后我們post的Url為http://localhost:56866/Post/123/456
?
結果如圖所示:
我們直接在url中按照路由規則給str1和str2指定了值,并且WebApi中的post函數成功獲取到了其值。
該i昂木的GitHub地址:https://github.com/liuzhenyulive/WebApiString
有什么疑問歡迎留言與我交流。
?
?
?
作者:碼農阿宇
出處:https://www.cnblogs.com/CoderAyu/p/8490115.html
本站使用「署名 4.0 國際」創作共享協議,轉載請在文章明顯位置注明作者及出處。
轉載于:https://www.cnblogs.com/jhxk/articles/10687695.html
總結
以上是生活随笔為你收集整理的ASP.NET WebAPI String 传值问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TYVJ P2032 「Poetize9
- 下一篇: 2019.4.11