# Getting Started

Before you can use RestSharp in your application, you need to add the NuGet package. You can do it using your IDE or the command line:

dotnet add package RestSharp

# Basic Usage

If you only have a few number of one-off requests to make to an API, you can use RestSharp like so:

using RestSharp;
using RestSharp.Authenticators;

var client = new RestClient("https://api.twitter.com/1.1");
client.Authenticator = new HttpBasicAuthenticator("username", "password");

var request = new RestRequest("statuses/home_timeline.json", DataFormat.Json);

var response = client.Get(request);

IRestResponse contains all the information returned from the remote server. You have access to the headers, content, HTTP status and more.

We recommend using the generic overloads like Get<T> to automatically deserialize the response into .NET classes.

# Asynchronous Calls

All synchronous methods have their asynchronous siblings, suffixed with Async.

So, instead of Get<T> that returns T or Execute<T>, which returns IRestResponse<T>, you can use GetAsync<T> and ExecuteAsync<T>. The arguments set is usually identical. You can optionally supply the cancellation token, which by default is set to CancellationToken.None.

For example:

using RestSharp;
using RestSharp.Authenticators;

var client = new RestClient("https://api.twitter.com/1.1");
client.Authenticator = new HttpBasicAuthenticator("username", "password");

var request = new RestRequest("statuses/home_timeline.json", DataFormat.Json);

var timeline = await client.GetAsync<HomeTimeline>(request, cancellationToken);

The most important difference, however, that async methods that are named after HTTP methods return the Task<T> instead of Task<IRestResponse<T>>. Because it means that you won't get an error response if the request fails, those methods throw an exception.

All ExecuteAsync overloads, however, behave in the same way as Execute and return the IRestResponse or IRestResponse<T>.

Read here about how RestSharp handles exceptions.

# Content type

RestSharp supports sending XML or JSON body as part of the request. To add a body to the request, simply call AddJsonBody or AddXmlBody method of the IRestRequest instance.

There is no need to set the Content-Type or add the DataFormat parameter to the request when using those methods, RestSharp will do it for you.

RestSharp will also handle both XML and JSON responses and perform all necessary deserialization tasks, depending on the server response type. Therefore, you only need to add the Accept header if you want to deserialize the response manually.

For example, only you'd only need these lines to make a request with JSON body:

var request = new RestRequest("address/update")
    .AddJsonBody(updatedAddress);
var response = await client.PostAsync<AddressUpdateResponse>(request);

# Response

When you use Execute or ExecuteAsync, you get an instance of IRestResponse back that has the Content property, which contains the response as string. You can find other useful properties there, like StatusCode, ContentType and so on. If the request wasn't successful, you'd get a response back with IsSuccessful property set to false and the error explained in the ErrorException and ErrorMessage properties.

When using typed Execute<T> or ExecuteAsync<T>, you get an instance of IRestResponse<T> back, which is identical to IRestResponse but also contains the T Data property with the deserialized response.

Extensions like Get<T> and GetAsync<T> will not return the whole IRestResponse<T> but just a deserialized response. You might get null back if something goes wrong, and it can be hard to understand the issue. Therefore, when using typed extension methods, we suggest setting IRestClient.ThrowOnAnyError property to true. By doing that, you tell RestSharp to throw an exception when something goes wrong. You can then wrap the call in a try/catch block and handle the exception accordingly. To know more about how RestSharp deals with exceptions, please refer to the Error handling page.