当 JSON 字符串中有 HTML 时,HttpPost 请求不起作用

HttpPost request not working when JSON string has HTML in

如果这与任何现有问题重复,请告诉我哪个 post 有类似情况。

我正在尝试调用 POST API,它实际上可以从 POSTMAN 等 REST 客户端完美运行。

当我尝试使用 HttpClient 从 C# 调用 API 时,它仅在我不在请求 body 中使用任何 HTML 内容时才有效。

这是我的代码:

HttpClient client = new HttpClient();
string baseUrl = channel.DomainName;
client.BaseAddress = new Uri(baseUrl);

client.DefaultRequestHeaders
        .TryAddWithoutValidation(
            "Content-Type",
            "application/x-www-form-urlencoded;charset=utf-8");

const string serviceUrl = "/api/create";

var jsonString = CreateApiRequestBody(model, userId, false);

var uri = new Uri(baseUrl + serviceUrl);
try
{
    HttpResponseMessage response = await client.PostAsync(uri.ToString(), new StringContent(jsonString, Encoding.UTF8, "application/json"));
    if (response.IsSuccessStatusCode)
    {
        Stream receiveStream = response.Content.ReadAsStreamAsync().Result;
        StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
        var str = readStream.ReadToEnd();
    }
    ...
}

我的 jsonString 看起来像:

{
    \"user_id\":\"6\",
    \"description\":\"<h2 style=\\"font-style:italic;\\"><u><font><font>Test Test Test&nbsp;</font></font></u></h2>\n\n<p style=\\"font-style: italic;\\">Hi it&#39;s a Test JOB</p>\n\n<p>&nbsp;</p>\"
}

当我在 description 标签中使用纯文本时,API returns 是一个有效的响应,但 HTML里面的内容。

我想我可能遗漏了一些额外的 header 或其他东西。

任何帮助将不胜感激。

您尝试过使用WebUtility.HtmlEncode()方法吗?

在设置 StringContent 内容的地方,尝试使用 WebUtility.HtmlEncode(jsonString) 使其 API 友好。

像这样:

using System.Net;

HttpResponseMessage response =
    await client.PostAsync(
               uri.ToString(),
               new StringContent(WebUtility.HtmlEncode(jsonString),
                                 Encoding.UTF8,
                                "application/json"));

别忘了使用 System.Net

这会给你一个安全的(特别是 APIs)HTML 字符串在你的请求中使用。

希望这对您有所帮助。