Удалить заголовки из ответа HttpClient - PullRequest
0 голосов
/ 02 июля 2019

Я сталкиваюсь с проблемой при использовании HttpClient. Звонок работает правильно, и я получаю ответ, но не могу получить содержание правильно.

Функция, которую я написал, выглядит следующим образом:

    public async Task<string> MakePostRequestAsync(string url, string data, CancellationToken cancel)
    {
        String res = String.Empty;

        using (HttpClient httpClient = new HttpClient())
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

            HttpContent content = new StringContent(data, Encoding.UTF8, "application/xml");
            httpClient.DefaultRequestHeaders.Authorization = getHeaders();
            httpClient.DefaultRequestHeaders.Add("Accept", "application/xml");
            httpClient.DefaultRequestHeaders.Add("User-Agent", "C#-AppNSP");
            httpClient.DefaultRequestHeaders.ExpectContinue = false;

            HttpResponseMessage response = await httpClient.PostAsync(url, content, cancel);
            response.EnsureSuccessStatusCode(); // Lanza excepción si no hay éxito

            res = await response.Content.ReadAsStringAsync();
            if (String.IsNullOrEmpty(res))
            {
                throw new Exception("Error: " + response.StatusCode);
            }
        }

        return res;
    }

Строка ответа, которую я получаю, похожа на эту:

HTTP/1.1 0 nullContent-Type: application/xml;charset=UTF-8
Content-Length: 1263
Date: Tue, 02 Jul 2019 07:48:07 GMT
Connection: close

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SeguimientoEnviosFechasResponse xsi:noNamespaceSchemaLocation="SeguimientoEnviosFechasResponse.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Error>0</Error>
    <MensajeError></MensajeError>
    <SeguimientoEnvioFecha>
        <!-- more XML here -->
    </SeguimientoEnvioFecha>
</SeguimientoEnviosFechasResponse>

Эта строка по какой-то причине включает заголовки, поэтому при попытке десериализации я получаю сообщение об ошибке.

Как я могу удалить эти заголовки в строке ответа?

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Ваш сервер возвращает заголовки в теле ответа.Было бы неплохо исправить это на стороне сервера, если это невозможно, вы должны извлечь тело из ответа:

        var xml = res.Substring(res.IndexOf("<?xml", StringComparison.Ordinal));
0 голосов
/ 02 июля 2019

Вы можете попробовать это:

using (var receiveStream = response.GetResponseStream()) 
{
  using (var readStream = new StreamReader(receiveStream, Encoding.UTF8)) 
  {
    Console.WriteLine (readStream.ReadToEnd ());
  }
}
...