JavaScript 調(diào)用 WebApi 參數(shù)傳遞場景分析

起因

近期使用WebApi過程中總遇到各種參數(shù)傳遞問題妄辩,特此總結(jié)復(fù)習
以下服務(wù)示例均為Web Api 2

場景一 Get

  • 服務(wù)示例
        // GET: api/TestWebApi
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET: api/TestWebApi/5
        public string Get(string id)
        {
            return "value";
        }
  • 調(diào)用示例
<script>
        $.ajax({
            url: "http://localhost:14884/api/TestWebApi",
            type: "get",
            data: {
                //"id": 5,
                "code": "1",  //無法獲取
                "value": "hello" //無法獲取
            },
            success: function (data) {
                console.log(data);
            }
        });
    </script>

小結(jié)
若調(diào)用中參數(shù)未匹配(本例中為注釋id)楞黄,則執(zhí)行無參方法,輸出為(2) ["value1", "value2"]
若調(diào)用中參數(shù)匹配致盟,則執(zhí)行有參方法碎税,輸出為value

場景二 Post

  • 服務(wù)示例
        public class DataModel
        {
            public string code { get; set; }
            public string value { get; set; }
        }

        // POST: api/TestWebApi
        public string Post([FromBody]DataModel dm)
        {
            return "Api捕獲參數(shù):" + dm.code + "_" + dm.value;
        }
  • 調(diào)用示例
    <script>
        $.ajax({
            url: "http://localhost:14884/api/TestWebApi",
            type: "post",
            data: {
                "id": 5,  //無法獲取
                "code": "1",   //可以獲取
                "value": "hello"   //可以獲取
            },
            success: function (data) {
                console.log(data);
            }
        });
    </script>

Post 參數(shù)正常獲取

小結(jié)
Post提交時雷蹂,常用實體搭配使用昧港,注意保持參數(shù)前后臺一致即可正常解析

場景三 Post List數(shù)組

  • 服務(wù)示例
        public class DataModel
        {
            public string code { get; set; }
            public string value { get; set; }
        }

        // POST: api/TestWebApi
        public string Post([FromBody]List<DataModel> dm)
        {
            return "Api捕獲參數(shù):" + dm[0].code + "_" + dm[0].value;
        }
  • 調(diào)用示例
        var temp_data = [{
            "code": "1",
            "value": "hello"
        }, {
            "code": "2",
            "value": "world"
        }];
        $.ajax({
            url: "http://localhost:14884/api/TestWebApi",
            type: "post",
            data: temp_data,
            success: function (data) {
                console.log(data);
            }
        });

List Post 參數(shù)無法獲取

Request Headers
經(jīng)觀察發(fā)送請求胚想,懷疑請求類型問題,后經(jīng)查找分析測試腕扶,調(diào)用示例做如下修改即可

  • 修改后調(diào)用示例
        var temp_data = [{
            "code": "1",
            "value": "hello"
        }, {
            "code": "2",
            "value": "world"
        }];
        temp_data = JSON.stringify(temp_data);
        $.ajax({
            url: "http://localhost:14884/api/TestWebApi",
            contentType: 'application/json; charset=utf-8',//將json數(shù)據(jù)以request payload的形式發(fā)起請求
            type: "post",
            data: temp_data,
            success: function (data) {
                console.log(data);
            }
        });
Post List參數(shù)獲取

場景三 部署后 405 異常補充說明

將場景三Web Api代碼部署后述呐,發(fā)現(xiàn)頁面調(diào)用會出現(xiàn) 405
異常

405 異常

通過檢索排除等方式,判斷IIS設(shè)置問題代虾,移除使用Web Api自動生成Web.confighandlersremove OPTIONSVerbHandler即可

處理程序映射
Web.config

參考
ASP.NET Web API(一):使用初探进肯,GET和POST數(shù)據(jù)
WebApi后端的List<String>前端如何發(fā)送?
aspnet webapi 跨域請求 405錯誤

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棉磨,一起剝皮案震驚了整個濱河市江掩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乘瓤,老刑警劉巖环形,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異衙傀,居然都是意外死亡抬吟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門统抬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來火本,“玉大人危队,你說我怎么就攤上這事「婆希” “怎么了茫陆?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長擎析。 經(jīng)常有香客問我簿盅,道長,這世上最難降的妖魔是什么揍魂? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任挪鹏,我火速辦了婚禮,結(jié)果婚禮上愉烙,老公的妹妹穿的比我還像新娘讨盒。我一直安慰自己,他們只是感情好步责,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布返顺。 她就那樣靜靜地躺著,像睡著了一般蔓肯。 火紅的嫁衣襯著肌膚如雪遂鹊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天蔗包,我揣著相機與錄音秉扑,去河邊找鬼。 笑死调限,一個胖子當著我的面吹牛舟陆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耻矮,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秦躯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裆装?” 一聲冷哼從身側(cè)響起踱承,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哨免,沒想到半個月后茎活,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡琢唾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年载荔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慧耍。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡身辨,死狀恐怖丐谋,靈堂內(nèi)的尸體忽然破棺而出芍碧,到底是詐尸還是另有隱情煌珊,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布泌豆,位于F島的核電站定庵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏踪危。R本人自食惡果不足惜蔬浙,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贞远。 院中可真熱鬧畴博,春花似錦、人聲如沸蓝仲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袱结。三九已至亮隙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垢夹,已是汗流浹背溢吻。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留果元,地道東北人促王。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像而晒,于是被迫代替她去往敵國和親硼砰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理欣硼,服務(wù)發(fā)現(xiàn)题翰,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,144評論 25 707
  • 文:嵐小茉 01 很多年以來,我都為自己的性格苦惱焦匈。 我羨慕那些在人群中侃侃而談的人血公,剛見面就能打成一片,在社交活...
    嵐小茉閱讀 1,366評論 0 1
  • 沒錯摔笤,我是一個愛哭鬼。 愛哭垦写,仿佛已經(jīng)成為了矯情的代名詞吕世。 我今天又哭了,一個比較好的同事要離職梯投,在她收拾好東西命辖,...
    畫語青黛閱讀 311評論 0 0
  • 8月30日,一直說想吃生蠔分蓖,一直說要約起吃飯尔艇,感謝她們一個月對自己的幫助,終于約上了么鹤。20:00终娃,蠔好吃。妮妮蒸甜、湯...
    小確幸里的小幸福閱讀 169評論 0 0