System.Net.Http.Json's HttpClient extension methods such as GetFromJsonAsync() greatly simplifies the routine codes to retrieve json objects from a web API. It's a pleasure to use.
But because of the way it's designed (returning deserialized objects directly), it does not produce any HttpResponseMessage for inspection that allows me to take custom actions based on HttpStatusCode.
Instead, non-success status codes results in a HttpRequestException, which does not appear to offer any properties that expose strongly typed HttpStatusCode. Instead, the status code is included in the exception's Message string itself.
Edit: .NET 5.0 added the HttpRequestException.StatusCode property, so it can now be inspected when calling GetFromJsonAsync.
//old post below
So I've been doing something like this:
try
{
var cars = await httpClient.GetFromJsonAsync<List<Car>>("/api/cars");
//...
}
catch (HttpRequestException ex)
{
if (ex.Message.Contains(HttpStatusCode.Unauthorized.ToString()))
{
//Show unauthorized error page...
}
//...
}
This feels a bit hacky. With the old school way of creating HttpRequestMessage and calling SendAsync, we naturally got the chance to inspect a response's HttpResponseMessage.StatusCode. Adding some of those codes back would defeat the convenient purpose of using the one-liners in System.Net.Http.Json.
Any suggestions here would be greatly appreciated.