WebApi使用填坑es6
前面工做跟別人作數據對接,由於咱們是對接方因此東西都得按照他們的要求進行修改,因而給本身挖了不少坑,其實更多的都是本身能力還不夠,在這裏也作一個筆記了。web
請求類型:application/jsonajax
測試工具:postmanjson
以下是個人測試推送數據的格式api
專業填坑一:直接獲取json串解析獲取到我想要的內容數組
寫好接口準備接收app
/// <summary>
/// 接收字符串
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[HttpPost] public string GetUser([FromBody]string name) { ResultModel reslut = new ResultModel(); if (string.IsNullOrEmpty(name)) { reslut.success = false; reslut.msg = "請求數據不能爲空"; } else { reslut.msg = name; reslut.success = true; } return JsonConvert.SerializeObject(reslut); }
由於是複雜類型的json因此經過raw方式進行請求工具
測試結果post
咦怎麼會獲得這樣的結果,測試斷點。學習
明明是發送了參數爲何後臺接受不到?帶着疑問繼續找答案,修改請求頭
獲得結果
通過百度一番,並無找到想要的答案,最後猜想多是webapi就不支持這種請求格式,沒辦法又換成表單方式進行請求
結果發現可使用x-wwww-form-urlencoded方式進行請求
獲得結果的我立刻就興奮起來,結果才發現我特麼要經過JSON格式進行請求,那麼我應該怎樣才能獲取到他的JSON串呢?
百度了不少資料,本身都不知道怎麼搜索了,最後反應過來,本身當時真的傻了,我接口的參數name是string類型,我錯誤的把Post發送的數據認爲是字符串類型,因此一直都接收不到,最後嘗試轉成字符串類型。
若是真的是這樣你就太天真了
MDF 。。。。
JSON串中含有雙引號我TM忘了,難受。。。那應該怎樣傳纔算是字符串呢?想到了es6的語法 ` `不知道有沒有用反正我是試了
。。試。。試了沒用。。。
可想這種JSON咱們咱們沒辦法轉成字符串進行發送,那麼究竟是不是發送字符串後臺可以接收呢?因而作了下測試
測試以後果真和本身想的相同,唉對技術不熟悉,只能經過本身猜想學習了。
最後發現的確是我後臺定義成字符串在post請求的時候我傳數據出現了問題,可是數據是第三方直接給的,跟他們協調死活不給換,沒辦法只能本身繼續填坑了。
這個地方就浪費了我半天的時間(技術菜了)
(坑一到這裏就結束了,並不能經過直接獲取串的方式進行解析獲取,若是他們串中不存在雙引號應該能夠解決,不過我是沒有解決,但願大神有方法留個連接。)
專業填坑二:建立相同類型的結構,自動填充
第一種方法在我這裏是行不通了,可是事情還得作,沒辦法那就試試第二種方式吧
建立好了類、寫好了接口方法,準備上場
/// <summary>
/// 接收復雜JSON
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost] public string GetUser2([FromBody]Class1 info) { ResultModel reslut = new ResultModel(); if (info == null) { reslut.success = false; reslut.msg = "請求數據不能爲空"; } else { reslut.success = true; reslut.msg = "推送成功"; reslut.code = info.baseInfo.code; } return JsonConvert.SerializeObject(reslut); }
#region 類結構
public class Class1 { public string operateType { get; set; } public Targetconditiondef targetConditionDef { get; set; } public Baseinfo baseInfo { get; set; } public Value value { get; set; } } public class Targetconditiondef { public string provinceAreaCode { get; set; } public string deptCode { get; set; } public string areaCode { get; set; } } #endregion
設置請求頭、請求體
(loading...)
(目瞪狗帶)
我接收的是一個對象實例,而他發送的是一個數組實例,不知道當時怎麼想的,怎麼想到去修改數據。
「刪掉先後方括號,應該就能夠了」。。。但怕不是個傻子喲
雖然我不知道當時怎麼想到改數據,並且跟對接方說「對不起,咱們不支持數組實例,咱們只接收對象實例,請大家立刻修改。」
而後。。。
好吧,當時真的傻了。。。
獲得結果...
我要回家,我要出家,我不適合敲代碼
到這裏坑也就解決了,唉。
專業填坑三:使用ajax請求接口
$(function () { var dal = JSON.stringify(da); $.ajax({ url: "http://localhost/WebApplication1/api/WebTest/GetUser", contentType: "application/json", data: dal, type: "post", success: function (r, v) { console.log(r); }, error: function (msg) { console.log(msg); } }) })
其實這個問題上面也給了答案了,這裏只是把ajax請求的方式在這裏把代碼貼上,最後使用network查看傳參,由於在開始的時候我使用ajax不知道是否是數據沒有發送過去,經過這裏能夠看到你的數據發送狀況,其實我也不是很會用可是仍是努力學習吧。
今天給本身挖了一天坑,但願本身的經歷對你有所幫助吧。
(下班肥家)