当 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 </font></font></u></h2>\n\n<p style=\\"font-style: italic;\\">Hi it's a Test JOB</p>\n\n<p> </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 字符串在你的请求中使用。
希望这对您有所帮助。
如果这与任何现有问题重复,请告诉我哪个 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 </font></font></u></h2>\n\n<p style=\\"font-style: italic;\\">Hi it's a Test JOB</p>\n\n<p> </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 字符串在你的请求中使用。
希望这对您有所帮助。