С помощью HttpClient.DeleteAsync и содержание.ReadAdStringAsync всегда возвращает null

когда я использую

3 ответов


ваш код никогда не проверяет ответ сообщения для StatusCode. В отличие от WebClient, HttpClient не бросает, когда StatusCode не находится в диапазоне 2xx.

Я уверен, что если вы проверите HttpResponseMessage.StatusCode/HttpResonseMessage.ReasonPhrase значения вы обнаружите, что сервер вернул код, отличный от 200.

например:

HttpClient _client = new HttpClient();
_client.BaseAddress = new Uri("http://httpbin.org/");
...
var response = await _client.DeleteAsync("/delete");
if (response.IsSuccessStatusCode)
{
    var result=await response.Content.ReadAsStringAsync();
    ....
}

вы также можете позвонить EnsureSuccessStatusCode метод для создания исключения, если состояние ответа не является кодом успеха:

HttpClient _client = new HttpClient();
_client.BaseAddress = new Uri("http://httpbin.org/");
...
var response = await _client.DeleteAsync("/delete");
response.EnsureSuccessStatusCode();
var result=await response.Content.ReadAsStringAsync();

редактировать

кстати, запуск следующего, как на .NET 4.5, возвращает тело:

        var  _client = new HttpClient();
        _client.BaseAddress = new Uri("http://httpbin.org/");
        var response = await _client.DeleteAsync("/delete");
        if (response.IsSuccessStatusCode)
        {
            var result = await response.Content.ReadAsStringAsync();
            Console.WriteLine(result);

        }

добавлять Accept заголовок не имеет никакого значения


У меня тот же случай... на данный момент я не знаю перегрузки метода для DeleteAsync, которые принимают параметры контента, такие как post. Поэтому я переключаю API с Delete на Post.


знаете ли вы:

base_address +  relative_address  

"http://www.youdomain.com/myservice/"  + "/test"  = "/test".

вот почему вы ничего не получаете