나는 의미있는 것을 반환하지 않기 때문에 ensureSuccessStatusCode를 좋아하지 않습니다. 그래서 내 자신의 확장 프로그램을 만들었습니다.
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의 ensureSuccessStatusCode에 대한 소스 코드는 여기 에서 찾을 수 있습니다.
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);
}
IsSuccessStatusCode에 대해 내가 싫어하는 점은 "멋지게"재사용 할 수 없다는 것입니다. 예를 들어 polly 와 같은 라이브러리를 사용 하여 네트워크 문제가 발생한 경우 요청을 반복 할 수 있습니다 . 이 경우 polly 또는 다른 라이브러리가 처리 할 수 있도록 예외를 발생시키는 코드가 필요합니다.