Je n'aime pas EnsureSuccessStatusCode car il ne renvoie rien de signifiant. C'est pourquoi j'ai créé ma propre extension:
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;
}
}
le code source d'EnsureSuccessStatusCode de Microsoft peut être trouvé ici
Version synchrone basée sur le lien 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);
}
Ce que je n'aime pas avec IsSuccessStatusCode, c'est qu'il n'est pas "joliment" réutilisable. Par exemple, vous pouvez utiliser une bibliothèque comme polly pour répéter une requête en cas de problème de réseau. Dans ce cas, vous avez besoin que votre code lève une exception afin que polly ou une autre bibliothèque puisse la gérer ...