EnsureSuccessStatusCode'u anlamlı bir şey döndürmediği için sevmiyorum. Bu yüzden kendi uzantımı oluşturdum:
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;
}
}
Microsoft'un EnsureSuccessStatusCode için kaynak kodu burada bulunabilir
SO bağlantısına dayalı eşzamanlı sürüm :
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);
}
IsSuccessStatusCode ile ilgili hoşlanmadığım şey "güzelce" yeniden kullanılabilir olmamasıdır. Örneğin , ağ sorunu olması durumunda bir isteği tekrarlamak için polly gibi kitaplığı kullanabilirsiniz . Bu durumda, polly veya başka bir kütüphanenin işleyebilmesi için istisna oluşturmak için kodunuza ihtiyacınız vardır ...