简体   繁体   English

如何处理 httpClient 响应正确?

[英]How to handle httpClient respond right?

Because of Net 6.0 usage I'm frustrated how to convert old HttpWebResponse to httpClient由于 Net 6.0 的使用,我很沮丧如何将旧的 HttpWebResponse 转换为 httpClient

Could someone help me to handle it right?有人可以帮我正确处理吗?

I have httpClient request我有 httpClient 请求

    var handler = new HttpClientHandler();
    if (handler.SupportsAutomaticDecompression)
    {
        handler.AutomaticDecompression = DecompressionMethods.GZip | 
            DecompressionMethods.Deflate;
    }
    var httpClient = new HttpClient(handler);
    httpClient.SendAsync(new HttpRequestMessage(new HttpMethod.Post, url));

And I have old HttpWebResponse我有旧的 HttpWebResponse

    using (var dataStream = httpWebRequest.GetRequestStream())
    {
        var reqDataByte = Encoding.GetEncoding(encoding).GetBytes(reqData);
        dataStream.Write(reqDataByte, 0, reqDataByte.Length);
    }

    using (var httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse())
    {
        var responseStream = httpWebResponse.GetResponseStream();

        if (responseStream != null)
            using (var streamReader =
                new StreamReader(responseStream, Encoding.GetEncoding(encoding)))
            {
                 getString = streamReader.ReadToEnd();
            }
    }

Couldn't understand how to handle respond with httpClient right无法理解如何使用 httpClient 正确处理响应

    using var dataStream = httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
    var reqDataByte = Encoding.GetEncoding(encoding).GetBytes(reqData);
    dataStream.CopyToAsync(reqDataByte, 0, reqDataByte.Length);

    using var response = (HttpWebResponse) httpClient.GetResponse();
    var responseStream = response.GetResponseStream();

    using var streamReader =
        new StreamReader(responseStream, Encoding.GetEncoding(encoding));
    getString = streamReader.ReadToEnd();

If you are trying to simply post raw bytes and get a string response back it is quite simple.如果您尝试简单地发布原始字节并返回字符串响应,那非常简单。 You will need this to be an async method and await the async calls.您将需要这是一个异步方法并等待异步调用。

var reqDataByte = Encoding.GetEncoding(encoding).GetBytes(reqData);
var response = await httpClient.PostAsync(url, new ByteArrayContent(reqDataByte));
if (response.IsSuccessStatusCode)
{
    getString = await response.Content.ReadAsStringAsync();
}
else
{
    //Handle any unsuccessful post
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM