Webapi創建和使用 以及填坑(二)


Webapi創建和使用 以及填坑(二)

上篇文章由於時間問題沒能講到POST提交,今天做一個補充

POST:

當我們直接通過POST發送方式發送會發現錯誤信息

參考解決:https://www.cnblogs.com/tinya/p/4562692.html

 

后面通過修改路由嘗試解決

 

此時再通過控制器到動作進行訪問

 

文章中說沒有重新生成也會出現這樣的錯誤,生成之后依然出錯(ctrl+shift+B)

事實上.net web api能夠正確的識別我們的控制器處理api/webtest,但不能找到一個可以接受的方式處理請求。換句話說能找到控制器,找不到動作。

文章作者最后通過在MSDN上web api官方說明找到解決方法

一、傳遞一個參數

 

這個意思應該是在方法參數中需要使用[FromBody]屬性強制請求內容,webapi會使用media-type格式化程序請求正文讀取name參數的值。

 

最后通過POST發送得到結果

 

當時我也好奇為什么沒有值,后面通過調試發現name值並沒有發送過來

 

參考作者的說法web api要求請求傳遞的[FromBody]參數是一個特定的格式,這種格式也並不是key=value的鍵值形式。Web API 的模型綁定器希望找到 [FromBody] 里沒有鍵名的值,也就是說, 不是 key=value ,而是=value 。

 

果然后台接收到了請求的值

 

 

既然已經得到了參數,那么我現在要傳入兩個參數是不是應該這樣寫呢?(我當時也是這樣想的)

 

結果很遺憾

 

 

二、傳遞多個參數

后面又通過MSDN查找到資料

 

當時我的心情就是這樣:不起作用你特么還寫。。。

但是通過這段話仿佛明白了,[FromBody]請求的內容是一個”application/json”請求的正文是原始的JSON字符串(不是JSON對象),這才明白過來,他傳遞過來的應該是個JSON字符串而不是key=value形式的對象形式。

於是我又犯傻的這樣嘗試了

 

得到的結果卻是

 

 

(腦闊痛)

於是看了下文章的講解,他解釋到[FromBody]修飾的參數只能有一個,如果需要多個參數,必須將參數封裝起來,而這個封裝是后台進行封裝(或者前台直接發送json串)

  1. A.    前台發送JSON串:

 

結果和我想的差不多直接將字符串發送過去,后台再進行解析

 

封裝了一個User類

 

准備反序列化,結果

 

難受至極,找了很久的問題,才發現,我穿的json有問題,我只是單個的對象,結果我穿過去的是個數組。

 

修改了JSON字符串接着解析

 

 

 

 

MDF果然是JSON寫錯了,同志們需要細心啊

回歸主題:webapi使用post發送JSON串后台進行解析到這里就結束了

  1. B.    前台發送key=value后台通過對象映射獲取

首先修改參數類型為User代碼如下

 

 

post通過發送key=value發送參數

 

 

結果還是很滿意的,后台直接根據表單的值映射到了模型中,在MVC表單傳值有相關映射,比如前台直接提交key=value形勢后台可以定義相同的參數名稱、定義對象類(成員名稱與之相同)等用法。具體文章地址忘了。

在這里webapi使用Post發送多參數使用Key=value方式也就結束了。

最后感謝博主文章,這篇文章里面還有很多我沒有說到的,希望對大家有幫助,文章鏈接:https://www.cnblogs.com/tinya/p/4562692.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM