首页 > 解决方案 > .net HttpClient post api 响应未正确呈现

问题描述

我正在尝试https://nayapatrikadaily.com/news-article/2/News使用 HttpPost请求从新闻站点获取 html 内容。

但是,在响应中,页面正在返回 Unicode 字符。

我在将 Unicode 字符转换为 html 时遇到了障碍。

网址

var nayapatrika = await ApiClient.PostAsync("https://nayapatrikadaily.com/ajax/pagination.php");

后异步:

public static async Task<HtmlDocument> PostAsync(string uri)
{
    string responseJson = string.Empty;
    var htmlDocument = new HtmlDocument();

    var handler = new HttpClientHandler()
    {
        AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
    };

    using (var client = new HttpClient(handler))
    {
        client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
        client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));

        var content = new MultipartFormDataContent();

        var values = new[]
        {
            new KeyValuePair<string, string>("perPage", "20"),
            new KeyValuePair<string, string>("page", "2"),
            new KeyValuePair<string, string>("cat", "1"),
        };

        foreach (var keyValuePair in values)
        {
            content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
        }

        var response = await client.PostAsync(uri, content);
        if (response.IsSuccessStatusCode)
        {
            responseJson = await response.Content.ReadAsStringAsync();
            htmlDocument.LoadHtml(responseJson);
        }
    }

    return htmlDocument;
}

在响应页面总是返回以下字符。

在此处输入图像描述

标签: c#html-agility-packasp.net-core-2.1

解决方案


反序列化 api 响应对我有用。正如我注意到的响应它有两个属性:newsListnumPages

我创建了这个类:ResponseObj

public class ResponseObj
{
    public string numPage { get; set; }
    public string newsList { get; set; }
} 

并解散成ResponseObj

var obj = JsonConvert.DeserializeObject<ResponseObj>(responseJson);

var response = await client.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{


    responseJson = await response.Content.ReadAsStringAsync();

    var obj = JsonConvert.DeserializeObject<ResponseObj>(responseJson);

    htmlDocument.LoadHtml(obj.newsList);
}

推荐阅读