Skip to content

Requests

Alessandro Morvillo edited this page Aug 8, 2026 · 2 revisions

Requests

RestlingClient provides convenience methods for common REST operations and execution methods for advanced request objects.

GET

Return response metadata and content without deserializing a model:

RestRequestResult result = await client.GetAsync(uri, cancellationToken);

Deserialize the response into a model:

RestRequestResult<Customer> result = await client.GetAsync<Customer>(uri,
                                                                     cancellationToken: cancellationToken);

POST and PUT

Send a request model without requiring a typed response:

RestRequestResult result = await client.PostAsync(uri,
                                                  requestData,
                                                  cancellationToken: cancellationToken);

Send one model and deserialize another:

RestRequestResult<Customer> result = await client.PostAsync<Customer, CreateCustomerRequest>(uri,
                                                                                             requestData,
                                                                                             cancellationToken: cancellationToken);

RestRequestResult<Customer> updated = await client.PutAsync<Customer, UpdateCustomerRequest>(uri,
                                                                                             updateData,
                                                                                             cancellationToken: cancellationToken);

DELETE

RestRequestResult result = await client.DeleteAsync(uri, cancellationToken);

RestRequestResult<DeleteReceipt> typedResult = await client.DeleteAsync<DeleteReceipt>(uri,
                                                                                       cancellationToken: cancellationToken);

All GET, POST, PUT, and DELETE operations also have overloads that accept RequestHeaders.

Generic request objects

Use RestRequest to select the HTTP method at runtime or to send a custom method:

RestRequest request = new(uri, AMDevIT.Restling.Core.HttpMethod.Get);

RestRequestResult<Customer> result = await client.ExecuteRequestAsync<Customer>(request,
                                                                                cancellationToken: cancellationToken);

To send a custom verb, select HttpMethod.Custom and provide the verb name:

RestRequest request = new(uri,
                          AMDevIT.Restling.Core.HttpMethod.Custom,
                          customMethod: "PATCH");

For a typed payload, use RestRequest<TRequest>:

RestRequest<UpdateCustomerRequest> request = new(uri,
                                                 AMDevIT.Restling.Core.HttpMethod.Put,
                                                 requestData);

RestRequestResult<Customer> result = await client.ExecuteRequestAsync<Customer, UpdateCustomerRequest>(request,
                                                                                                       cancellationToken: cancellationToken);

Set ContentMediaType when the server requires a specific payload content type.

Raw requests

Use RestRawRequest when the body is already serialized or must be sent verbatim:

using AMDevIT.Restling.Core.Network;

RestRawRequest request = new(uri,
                             AMDevIT.Restling.Core.HttpMethod.Post,
                             content: json,
                             contentType: HttpMediaType.ApplicationJson)
{
    AcceptType = HttpMediaType.ApplicationJson
};

RestRequestResult<ApiResponse> result = await client.ExecuteRawRequestAsync<ApiResponse>(request,
                                                                                         cancellationToken: cancellationToken);

Form URL-encoded requests

IDictionary<string, string> fields = new Dictionary<string, string>
{
    ["grant_type"] = "client_credentials",
    ["scope"] = "api.read"
};

FormUrlEncodedRequest request = new(uri,
                                    AMDevIT.Restling.Core.HttpMethod.Post,
                                    fields);

RestRequestResult<TokenResponse> result = await client.ExecuteFormUrlEncodedRequest<TokenResponse>(request,
                                                                                                   cancellationToken: cancellationToken);

Binary responses

Request a byte array to download binary content:

RestRequestResult<byte[]> result = await client.GetAsync<byte[]>(downloadUri,
                                                                 cancellationToken: cancellationToken);

if (result.IsSuccessful && result.Data is not null)
{
    await File.WriteAllBytesAsync(destinationPath, result.Data, cancellationToken);
}

See Serialization for payload selection and Headers and Authentication for request-specific headers.

Clone this wiki locally