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串)
- A. 前台發送JSON串:
結果和我想的差不多直接將字符串發送過去,后台再進行解析
封裝了一個User類
准備反序列化,結果
難受至極,找了很久的問題,才發現,我穿的json有問題,我只是單個的對象,結果我穿過去的是個數組。
修改了JSON字符串接着解析
MDF果然是JSON寫錯了,同志們需要細心啊
回歸主題:webapi使用post發送JSON串后台進行解析到這里就結束了
- B. 前台發送key=value后台通過對象映射獲取
首先修改參數類型為User代碼如下
post通過發送key=value發送參數
結果還是很滿意的,后台直接根據表單的值映射到了模型中,在MVC表單傳值有相關映射,比如前台直接提交key=value形勢后台可以定義相同的參數名稱、定義對象類(成員名稱與之相同)等用法。具體文章地址忘了。
在這里webapi使用Post發送多參數使用Key=value方式也就結束了。
最后感謝博主文章,這篇文章里面還有很多我沒有說到的,希望對大家有幫助,文章鏈接:https://www.cnblogs.com/tinya/p/4562692.html