簡體   English   中英

將 JSON 作為 POST 請求正文中的字符串傳遞

[英]Passing JSON as a string in the body of the POST request

我需要一點幫助,因為我不知道如何解決以下問題。

要求很簡單,我必須將 JSON 作為字符串參數發送到服務器。 服務器根據key找到映射,一般將JSON解析為一些對象。 這意味着,有效負載可以有不同的值和結構,每個鍵都有自己的映射 - 不同的數據結構、參數數量等。 因此,不應在端點邏輯之外解析有效負載。

我知道,Swagger 將有效負載視為 JSON,而不是字符串,它會嘗試解析數據。 如何在不解析參數的情況下將 JSON 作為字符串參數發送到端點? 由於提到的映射,我必須在應用程序內部解析它。

示例 JSON:

{
  "key": "test",
  "payload": "[{"IDNew":1,"NameNew":"t1","DescriptionNew":"t1d", "IntegerValueNew":1, "DecimalValueNew":123.3}]"
}

當我嘗試在 Swagger 中發送數據時,我得到以下結果:

curl -X POST "http://localhost:5110/api/InboundData" -H  "accept: */*" -H  "Content-Type: application/json-patch+json" -d "{  \"key\": \"test\", \"payload\": \"[{\"IDNew\":1,\"NameNew\":\"t1\",\"DescriptionNew\":\"t1d\", \"IntegerValueNew\":1, \"DecimalValueNew\":123.3}]\"}"

{
  "errors": {
    "payload": [
      "After parsing a value an unexpected character was encountered: I. Path 'payload', line 3, position 17."
    ]
  },
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "|d952c89f-4e25126d8cdf3697."
}

數據 model:

[Required]
[JsonProperty(Required = Required.DisallowNull)]
[MaxLength(100)]
public string Key { get; set; }
       
[Required]
[JsonProperty(Required = Required.DisallowNull)]
public string Payload { get; set; }

該錯誤清楚地表明您的JSON不正確。 如果我們分析有效載荷屬性:

{
  "key": "test",
  "payload": "[{"IDNew":1,"NameNew":"t1","DescriptionNew":"t1d", "IntegerValueNew":1, "DecimalValueNew":123.3}]"
}

您似乎正在創建一個字符串 object ,其中還包含一個 JSON 作為字符串。 一般來說,當你傳遞一個數組時,你會像這樣傳遞它。

{
  "key": "test",
  "payload": [
    {
      "IDNew": 1,
      "NameNew": "t1",
      "DescriptionNew": "t1d",
      "IntegerValueNew": 1,
      "DecimalValueNew": 123.3
    }
  ]
}

但是,由於payload屬性的值沒有被正確轉義,這就是為什么它不能正確解析它,因為它有一個字符串值的意外字符。

如果您嚴格希望將 JSON 數組作為字符串 object 傳遞,則需要正確轉義它才能使其正常工作:

{
  "key": "test",
  "payload": "[{\"IDNew\":1,\"NameNew\":\"t1\",\"DescriptionNew\":\"t1d\", \"IntegerValueNew\":1, \"DecimalValueNew\":123.3}]"
}

如果您嚴格希望通過 JSON JSON進一步包含 Z0ECD11C1D7A2D874A22.

或者,也許,使用單引號 (') 代替嵌套的JSON

{
  "key": "test",
  "payload": "[{'IDNew':1,'NameNew':'t1','DescriptionNew':'t1d', 'IntegerValueNew':1, 'DecimalValueNew':123.3}]"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM