如果这与任何现有问题重复,请告诉我哪个帖子有类似情况。
我正在尝试调用POST API,它实际上可以从POSTMAN等REST客户端完美运行。
当我尝试使用HttpClient
从C#调用该API时,只有在请求正文中不使用任何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会返回有效的响应,但不会返回其中的HTML内容。
我相信我可能会遗漏一些额外的标题或其他内容。
非常感谢任何帮助。
答案 0 :(得分:1)
您是否尝试过使用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
这将为您提供在您的请求中使用的安全(特别是对于API)HTML字符串。
希望这有帮助。