GetAsync Method

Make a type-safe GET request.

Namespace

RestClient.Net

Containing Type

HttpClientExtensions

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:

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