मुझे 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 का स्रोत कोड यहां पाया जा सकता है
एसओ लिंक पर आधारित तुल्यकालिक संस्करण :
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 के बारे में क्या पसंद नहीं करता है कि यह "अच्छी तरह से" पुन: प्रयोज्य नहीं है। उदाहरण के लिए आप नेटवर्क समस्या के मामले में अनुरोध दोहराने के लिए लाइब्रेरी जैसे पोली का उपयोग कर सकते हैं । उस स्थिति में आपको अपवाद जुटाने के लिए अपने कोड की आवश्यकता होती है ताकि पोली या कोई अन्य लाइब्रेरी इसे संभाल सके ...