You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在POST请求中发送JSON字符串参数至后端接口?

解决方案

1. 修正Payload转义与请求Content-Type

问题核心在于两个错误:一是误用了application/json-patch+json作为请求类型(该类型专用于JSON Patch操作),二是curl请求中Payload的双引号未完成正确转义。

正确的curl请求

将Content-Type改为标准的application/json,同时确保Payload内部的双引号做双重转义(因整个请求体被双引号包裹):

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

标准JSON格式(手动测试用)

若直接使用JSON文件发送,正确格式应为:

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

2. 配置Swagger禁止解析Payload内容

如果使用Swashbuckle(.NET Swagger库),可通过属性标记明确告知Swagger将Payload视为纯字符串,避免自动解析:

using Swashbuckle.AspNetCore.Annotations;

[Required]
[JsonProperty(Required = Required.DisallowNull)]
[MaxLength(100)]
public string Key { get; set; }
       
[Required]
[JsonProperty(Required = Required.DisallowNull)]
[SwaggerSchema(Format = "string", Description = "JSON格式字符串,将在服务端根据Key解析")]
public string Payload { get; set; }

也可添加全局Schema过滤器,强制指定Payload的类型为字符串:

services.AddSwaggerGen(c =>
{
    c.SchemaFilter<PayloadStringFilter>();
});

public class PayloadStringFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.Type == typeof(你的数据模型类名))
        {
            schema.Properties["payload"].Format = "string";
            schema.Properties["payload"].Type = "string";
        }
    }
}

3. 备选方案:Base64编码Payload

若转义问题反复出现,可将Payload的JSON字符串转为Base64编码,彻底避免解析器误识别:

  • 客户端:将[{"IDNew":1,"NameNew":"t1",...}]转为Base64字符串,示例:W3siSUROZXciOjEsIk5hbWVOZXciOiJ0MSIsIkRlc2NyaXB0aW9uTmV3IjoidDFkIiwgIkludGVnZXJWYWx1ZU5ldyI6MSwgIkRlY2ltYWxWYWx1ZU5ldyI6MTIzLjN9XQ==
  • 发送的JSON:
    {
      "key": "test",
      "payload": "W3siSUROZXciOjEsIk5hbWVOZXciOiJ0MSIsIkRlc2NyaXB0aW9uTmV3IjoidDFkIiwgIkludGVnZXJWYWx1ZU5ldyI6MSwgIkRlY2ltYWxWYWx1ZU5ldyI6MTIzLjN9XQ=="
    }
    
  • 服务端解码:
    var payloadBytes = Convert.FromBase64String(model.Payload);
    var payloadJson = Encoding.UTF8.GetString(payloadBytes);
    // 后续根据Key解析payloadJson为对应对象
    

内容的提问来源于stack exchange,提问作者Redzix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:15:44