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