Using RandomSkunk.Results with System.Net.Http and System.Net.Http.Json.
$ dotnet add package RandomSkunk.Results.HttpTo make it easier to get a result object representing an HTTP operation, several extension methods for HttpClient are provided.
public async Task<Maybe<T>> ExampleTryGetFromJsonAsync<T>()
{
HttpClient httpClient = new HttpClient();
Maybe<T> result = await httpClient.TryGetFromJsonAsync<T>("http://example.com");
return result;
}
public async Task<Result> ExampleTryPostAsJsonAsync<T>(T value)
{
HttpClient httpClient = new HttpClient();
Result<HttpResponseMessage> result = await httpClient.TryPostAsJsonAsync("http://example.com", value);
return await result.EnsureSuccessStatusCodeAsync();
}
public async Task<Result> ExampleTryPatchAsJsonAsync<T>(T value)
{
HttpClient httpClient = new HttpClient();
Result<HttpResponseMessage> result = await httpClient.TryPatchAsJsonAsync("http://example.com", value);
return await result.EnsureSuccessStatusCodeAsync();
}
public async Task<Result> ExampleTryPutAsJsonAsync<T>(T value)
{
HttpClient httpClient = new HttpClient();
Result<HttpResponseMessage> result = await httpClient.TryPutAsJsonAsync("http://example.com", value);
return await result.EnsureSuccessStatusCodeAsync();
}
public async Task<Result> ExampleTryDeleteAsync()
{
HttpClient httpClient = new HttpClient();
Result<HttpResponseMessage> result = await httpClient.TryDeleteAsync("http://example.com");
return await result.EnsureSuccessStatusCodeAsync();
}
public async Task<Result<HttpResponseMessage>> ExampleTrySendAsync(
HttpRequestMessage request)
{
HttpClient httpClient = new HttpClient();
Result<HttpResponseMessage> result = await httpClient.TrySendAsync(request);
return result;
}
There are three extension methods - GetResultAsync, ReadResultFromJsonAsync<T>, and ReadMaybeFromJsonAsync<T> - for creating result objects (Result, Result<T>, and Maybe<T> respectively) from an HttpResponseMessage.
public async Task<Result> ExampleResultMethod1()
{
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("https://example.com");
Result result = await response.GetResultAsync();
return result;
}
public async Task<Result<T>> ExampleResultMethod2<T>()
{
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("https://example.com");
Result<T> result = await response.ReadResultFromJsonAsync<T>();
return result;
}
public async Task<Maybe<T>> ExampleMaybeMethod3<T>()
{
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("https://example.com");
Maybe<T> result = await response.ReadMaybeFromJsonAsync<T>();
return result;
}