ASP.NET WebAPI String 传值问题
如果我們再WebAPI中定義了只有一個string參數(shù)的WebAPI函數(shù),如下所示:
?
[HttpPost] public string TrackBill(string str){return str;} 就是這樣一個簡單的函數(shù),有一個字符串類型的參數(shù),?
當我們用PostMan對該API進行測試,給api接口傳一個Key為str,value為123的鍵值對。
其結果如下:
我們看到,返回的結果是找不到與該請求匹配的資源。很奇怪,我們的給該方法指定了HttpPost的方法,也指定了參數(shù)名為str的參數(shù),請求的方法是post方法,參數(shù)也是str,卻匹配不到該函數(shù)。
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類型的參數(shù)時,不能給該鍵值對賦予key值,也就是說key必須得空著。
如下所示。
我們在postman中把key空著,然后value為123,結果webapi中的post函數(shù)成功獲取到了改值。
不知道微軟在這樣設計的時候出于什么考慮。
3.第三步。
post函數(shù)兩個string類型的參數(shù)。填加post的重載方法,如下:
?
? [HttpPost]public string Post([FromBody]string str1, [FromBody]string str2){return string.Format("第一個str是:{0},第二個str是{1}",str1,str2);} 我在在postman中和上例一樣,不指定key,然后指定兩個value,看看結果會怎樣??
當兩個key都是空著的時候,出現(xiàn)錯誤,提示,“無法將多個參數(shù)(“str1”和“str2”)綁定到請求的內容。”
也就是說多個string參數(shù),那么key不能空著,我們加上試試。
結果讓人很意外,任然是不可以。
4.第四步,
那么,當有多個string類型的參數(shù)怎么辦呢?
我想到的解決辦法是用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中給參數(shù)指定值。
代碼如下:
?
[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中按照路由規(guī)則給str1和str2指定了值,并且WebApi中的post函數(shù)成功獲取到了其值。
該i昂木的GitHub地址:https://github.com/liuzhenyulive/WebApiString
有什么疑問歡迎留言與我交流。
?
?
?
作者:碼農阿宇
出處:https://www.cnblogs.com/CoderAyu/p/8490115.html
本站使用「署名 4.0 國際」創(chuàng)作共享協(xié)議,轉載請在文章明顯位置注明作者及出處。
轉載于:https://www.cnblogs.com/jhxk/articles/10687695.html
總結
以上是生活随笔為你收集整理的ASP.NET WebAPI String 传值问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TYVJ P2032 「Poetize9
- 下一篇: 【Core】当前 .NET SDK 不支