Webapi建立和使用 以及填坑(三)

 

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不知道是否是數據沒有發送過去,經過這裏能夠看到你的數據發送狀況,其實我也不是很會用可是仍是努力學習吧。

 

今天給本身挖了一天坑,但願本身的經歷對你有所幫助吧。

(下班肥家)

相關文章
相關標籤/搜索