C# Чтение всех ответов из HTTP-ответа Windows Система. Net .Http - PullRequest
0 голосов
/ 08 января 2020

Это мой метод, asyn c HTTP POST:

using System;                               //main data types
using System.Net.Http;                      //for HTTP client
using System.Threading.Tasks;               //for Async Request/Response
using Newtonsoft.Json;                      //for JSON properties

//... the call..
public void Something()
{
PostConsentAsync(cnsnt.BaseURL, cnsnt.Headers, cnsnt.Body).GetAwaiter().GetResult();
}

//... the async task...
public async Task HttpPostAsync(Uri HTTPaddress, cHeaders myHeaders, cBody myBody)
{
    try
    {
        HttpClient client = new HttpClient();
        System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true);

        using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, HTTPaddress))
        {
            client.BaseAddress = HTTPaddress;
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("*/*"));

            client.DefaultRequestHeaders.Add("Connection", "keep-alive");
            client.DefaultRequestHeaders.Add("Cache-Control", "no-cache");
            client.DefaultRequestHeaders.Add("SomeHeader", myHeaders.SomeHeader);
            client.DefaultRequestHeaders.Add("MyOtherHeader", myHeaders.MyOtherHeader);
            //etc..

            request.Content = new StringContent(JsonConvert.SerializeObject(myBody, Formatting.Indented), utf8, "application/json");

            using (HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false))
            {
                Int32 code = (Int32)response.StatusCode;

                //How to read ALL the response, including headers, body etc???

                Console.WriteLine("03\r\nRESPONSE: {0}", response.RequestMessage.ToString() + "\r\nBody:\r\n" + <?????> + "Response HTTP status: " + code + " [" + response.StatusCode.ToString() + "]");
                Console.ReadLine();
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("Error in " + e.TargetSite + "\r\n" + e.Message); Console.ReadLine();
    }
}

Мне нужно прочитать весь ответ, но кажется трудным ... Мне нужно иметь полное ответное сообщение и, в Кроме того, в той или иной форме, как ответ. так что я могу передать это другому HTTP-запросу. Поэтому я пытался получить полный ответ и каким-то образом передать его в классе, и получить что-то вроде response.myHeader1.Name (имя заголовка) или response.myHeader1.Value (значение этого заголовка, ноль, если ноль) et c или что-то в этом роде. Но я не могу получить сообщение целиком, я получаю заголовки, я получаю код (то есть 200 - это успех и c), но тела там нет и c.

1 Ответ

1 голос
/ 08 января 2020

Чтобы получить тело, вам необходимо получить доступ к свойству Содержимое HttpResponseMessage, например:

var body = await response.Content.ReadAsStringAsync();

...