Saya tidak suka EnsureSuccessStatusCode karena tidak mengembalikan apa pun yang berarti. Itulah mengapa saya membuat ekstensi saya sendiri:
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;
}
}
kode sumber untuk EnsureSuccessStatusCode Microsoft dapat ditemukan di sini
Versi sinkron berdasarkan tautan 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);
}
Apa yang saya tidak suka tentang IsSuccessStatusCode adalah bahwa itu tidak dapat digunakan kembali dengan "baik". Misalnya Anda dapat menggunakan library seperti polly untuk mengulangi permintaan jika terjadi masalah jaringan. Dalam hal ini Anda memerlukan kode Anda untuk memunculkan pengecualian sehingga polly atau beberapa pustaka lain dapat menanganinya ...