Eu não gosto de VerifySuccessStatusCode, pois não retorna nada significativo. É por isso que criei minha própria extensão:
public static class HttpResponseMessageExtensions
{
public static async Task EnsureSuccessStatusCodeAsync(this HttpResponseMessage response)
{
if (response.IsSuccessStatusCode)
{
return;
}
var content = await response.Content.ReadAsStringAsync();
if (response.Content != null)
response.Content.Dispose();
throw new SimpleHttpResponseException(response.StatusCode, content);
}
}
public class SimpleHttpResponseException : Exception
{
public HttpStatusCode StatusCode { get; private set; }
public SimpleHttpResponseException(HttpStatusCode statusCode, string content) : base(content)
{
StatusCode = statusCode;
}
}
o código-fonte para o VerifySuccessStatusCode da Microsoft pode ser encontrado aqui
Versão síncrona baseada no link SO :
public static void EnsureSuccessStatusCode(this HttpResponseMessage response)
{
if (response.IsSuccessStatusCode)
{
return;
}
var content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
if (response.Content != null)
response.Content.Dispose();
throw new SimpleHttpResponseException(response.StatusCode, content);
}
O que eu não gosto em IsSuccessStatusCode é que não é "bem" reutilizável. Por exemplo, você pode usar a biblioteca como polly para repetir uma solicitação em caso de problema de rede. Nesse caso, você precisa que seu código levante uma exceção para que polly ou alguma outra biblioteca possa lidar com isso ...