WebApi Dictionary<string, object> 跨域問題

問題描述

使用WebApi編寫通用服務,小程序POST調用,服務參數(shù)獲取正常,頁面POST調用,服務參數(shù)無法獲取

代碼示例

WebApi服務

        // POST: api/Test
        public string Post(Dictionary<string, object> dic)
        {
            return dic.ToString();
        }

小程序調用

wx.request({
      url: "http://localhost:24739/api/Test",
      method: 'POST',
      data: {
        'key1': 'value1',
        'key2': 'value2',
        'key3': 'value3'
      },
      success: function (res) {
        debugger
      },
      fail: function (res) {
        debugger
      }
    })
小程序調用正常

小程序調用監(jiān)視

頁面調用

        var url = "http://localhost:24739/api/Test";
        var data = {
            'key1': 'value1',
            'key2': 'value2',
            'key3': 'value3'
        };
        $.ajax({
            url: url,
            method: 'POST',
            dataType: "json",
            //contentType: "application/x-www-form-urlencoded", //默認
            //contentType: "multipart/form-data", 
            //contentType: "application/json", 
            data: data,//JSON.stringify(data),
            success: function (res) {
                debugger
            },
            fail: function (res) {
                debugger
            }
        })
頁面調用無法獲取

頁面調用監(jiān)視

問題分析

對比發(fā)現(xiàn)主要為content-type不同,但指定頁面contentType非默認后,提示跨域相關信息

修改contentType

方法一,同源訪問

將測試頁面拷貝至服務端口下,再次調用,正常解析


同域訪問

正常解析

方法二,使用[FromBody]接收,再轉換合適類型

WebApi服務

    public class dic {
        public string strJson { get; set; }
    }

        // POST: api/Test
        public string Post([FromBody]dic dic)
        {
            //轉json
            JObject json = JObject.Parse(dic.strJson);
            //轉字典
            Dictionary<string, object> k = StringToDictionary(dic.strJson);
            //......
            return "";
        }

頁面調用

var url = "http://localhost:24739/api/Test";
        var data = {
            "strJson": "{ 'key1': 'value1', 'key2': 'value2', 'key3': 'value3' }"
        };
        $.ajax({
            url: url,
            method: 'POST',
            dataType: "json",
            //contentType: "application/x-www-form-urlencoded", //默認
            //contentType: "multipart/form-data", 
            //contentType: "application/json", 
            data: data,
            success: function (res) {
                debugger
            },
            fail: function (res) {
                debugger
            }
        })
正常解析

總結

WebApi使用特殊參數(shù)接收時,可逐步排除問題,適當轉換思路常常有意外的驚喜

ajax跨域常見解決辦法:
1.JSONP僅支持GET
2.CORS設置訪問域總有問題,測試未成功

另:nodejs、小程序之類貌似天生就能很好支持跨域

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數(shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,427評論 6 13
  • 跨域, 為什么需要跨域?跨域有什么不好?怎么實現(xiàn)跨域? 一、什么是跨域 只要協(xié)議、域名、端口有任何一個不同,都被當...
    Lemon不怕酸啊閱讀 686評論 0 0
  • 還好四月遇見了你 讓群鴉游走過的天際 多了一片云 不是五彩也沒有蓋世 只是一個普通身影 卻鋪天蓋地照亮了古今 曾經...
    決弦閱讀 367評論 2 5
  • 姓名:張義躍 245期謙虛1組學員 公司:本一設計 【日精進打卡第119天】 【知~學習】 《六項精進》誦讀0遍共...
    小小蛋兒閱讀 226評論 0 0

友情鏈接更多精彩內容