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

时间:2016-05-04 11:27:01

标签: c# asp.net-web-api http-post httpclient dotnet-httpclient

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

我正在尝试调用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&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会返回有效的响应,但不会返回其中的HTML内容。

我相信我可能会遗漏一些额外的标题或其他内容。

非常感谢任何帮助。

1 个答案:

答案 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字符串。

希望这有帮助。