GetAsync Method
Make a type-safe GET request.
Namespace
RestClient.Net
Containing Type
Signature
public static async Task<Result<TSuccess, HttpError<TError>>> GetAsync<TSuccess, TError>(
this HttpClient httpClient,
AbsoluteUrl url,
Func<HttpResponseMessage, CancellationToken, Task<TSuccess>> deserializeSuccess,
Func<HttpResponseMessage, CancellationToken, Task<TError>> deserializeError,
IReadOnlyDictionary<string, string>? headers = null,
CancellationToken cancellationToken = default
)
Parameters
| Parameter | Type | Description |
|---|---|---|
url |
AbsoluteUrl |
The request URL (use .ToAbsoluteUrl() extension) |
deserializeSuccess |
Func<HttpResponseMessage, CancellationToken, Task<TSuccess>> |
Function to deserialize success response |
deserializeError |
Func<HttpResponseMessage, CancellationToken, Task<TError>> |
Function to deserialize error response |
headers |
IReadOnlyDictionary<string, string>? |
Optional request headers |
cancellationToken |
CancellationToken |
Optional cancellation token |
Returns
Task<Result<TSuccess, HttpError<TError>>> - A discriminated union that is either:
Ok<TSuccess>- Success with deserialized dataError<HttpError<TError>>- Error with ResponseError or ExceptionError
Example
var result = await httpClient.GetAsync(
url: "https://api.example.com/users/1".ToAbsoluteUrl(),
deserializeSuccess: DeserializeUser,
deserializeError: DeserializeApiError
);
var output = result switch
{
OkUser(var user) => $"Found: {user.Name}",
ErrorUser(ResponseErrorUser(var err, var status, _)) => $"API Error {status}: {err.Message}",
ErrorUser(ExceptionErrorUser(var ex)) => $"Exception: {ex.Message}",
};
See Also
- HttpClientExtensions - All extension methods
- Result<TSuccess, TError> - The return type
- Serialization - Deserializer examples