C#编写Windows服务调用API发POST请求携带双引号导致请求异常如何解决
解决方案
你遇到的问题本质是JSON 字符串转义规则未正确处理导致的,直接手动拼接 POST 请求的 JSON 载荷是问题的核心诱因,有成熟的方案可以原生保留双引号:
方案1:使用标准 JSON 序列化库(最推荐)
不要手动拼接 JSON 字符串,直接用 .NET 官方的 System.Text.Json 或者第三方的 Newtonsoft.Json 处理序列化,库会自动对所有特殊字符做合规转义,不需要你手动处理任何字符:
// 1. 先定义请求对应的实体类 public class PostRequest { public string Description { get; set; } // 其他请求字段按需添加 } // 2. 序列化时自动处理转义 var requestData = new PostRequest { Description = description // 直接传原始用户输入即可,双引号会被自动转义 }; string jsonPayload = JsonSerializer.Serialize(requestData); // 3. 发起POST请求时直接用序列化后的payload即可
这种方式除了双引号,还会自动处理换行、制表符、特殊 Unicode 字符等所有 JSON 要求转义的内容,不会出现格式错误。
方案2:手动转义双引号(仅用于必须手动拼接JSON的极端场景,不推荐)
如果确实需要手动拼接 JSON,需要把字符串中的双引号替换为 JSON 规范要求的转义格式 \",注意 C# 中字符串是不可变类型,Replace 方法会返回新字符串,必须赋值给原变量才会生效:
// 正确的转义写法,替换后双引号会变成JSON可识别的转义格式 description = description.Replace("\"", "\\\"");
注意:手动转义只处理了双引号问题,如果用户输入包含换行、反斜杠等其他特殊字符,依然会导致 JSON 格式错误,因此仅作为临时应急方案使用。
效果验证
你举例的 Replaced 4" pipe 内容,经过正确转义后在 JSON 载荷中会表现为 {"description":"Replaced 4\" pipe"},API 端解析后会自动还原为原始的带双引号的内容,不会出现字段提前截断的问题。
内容的提问来源于stack exchange,提问作者jpb103
相关产品推荐
相关产品推荐

