【发布时间】:2021-10-04 14:02:15
【问题描述】:
我正在通过用 C# 编写的 Windows 服务向 API 发出 POST 请求,并且内容各不相同。有时,用户会使用 " 来表示英寸。这些数据必须传递给 API,但是当它自动完成时,按照我设置的方式,这会导致它在 POST 内容中结束描述字符串过早地,导致错误的请求。
例如,我可能有一个如下所示的“描述”字段:
“更换 4” 管道”
有没有办法在不退出字符串的情况下在字符串中间传递“?它可能类似于以下内容,还是我应该将“”字符替换为“英寸”这个词?我更愿意发送实际的双引号,因为我不确定他们会 always 表示它的意思是英寸。 即他们可能实际上是在引用某人的话。
if (description.Contains("\""))
{
description.Replace("\"", "inch");
}
【问题讨论】:
-
发送POST请求时可以用反斜杠(\)转义引号
-
你的帖子做得怎么样?大多数 API 都会为您担心这一点,但 听起来 就像您错过了编码步骤,其中
"变为%22,假设这是原始的application/x-www-form-urlencoded数据?但是:我们能否看到您实际上是如何将description发布到服务器(以及其他任何字段)? (许多其他字符都受此影响;请不要将"替换为%22) -
加上如果是json或者xml body,你应该使用适当的序列化器来序列化内容并转义非法字符。
-
这是一个 HttpRequestMessage 顺便说一句。
-
@jpb103 不要那样做。连接字符串不遵守 JSON 的正确转义规则。使用JObject 来构造主体,这将在对象被序列化时尊重字符转义。
标签: c# json string api windows-services