RestHttpClient 0.5.0-alpha
See the version list below for details.
dotnet add package RestHttpClient --version 0.5.0-alpha
NuGet\Install-Package RestHttpClient -Version 0.5.0-alpha
<PackageReference Include="RestHttpClient" Version="0.5.0-alpha" />
paket add RestHttpClient --version 0.5.0-alpha
#r "nuget: RestHttpClient, 0.5.0-alpha"
// Install RestHttpClient as a Cake Addin #addin nuget:?package=RestHttpClient&version=0.5.0-alpha&prerelease // Install RestHttpClient as a Cake Tool #tool nuget:?package=RestHttpClient&version=0.5.0-alpha&prerelease
RestHttpClient
Simple and flexible REST client built on top of Microsoft's System.Net.HttpClient.
Usage
var client = new RestHttpClient
{
BaseAddress = new Uri("https://jsonplaceholder.typicode.com")
};
var list = await client.RestGetAsync<List<Todo>>("todos");
var todo = await client.RestGetAsync<Todo>("todos/1");
var model = new Todo
{
Title = "Lorem Ipsum",
UserId = 1
};
var createdTodo = await client.RestPostAsync<Todo>("todos", model);
Customize serialization
Implement one of ISerializer
, IDeserializer
, IConverter (combination of both)
and set to according property on RestHttpClient
:
var client = new RestHttpClient
{
BaseAddress = new Uri("https://jsonplaceholder.typicode.com"),
Converter = new JsonRestConverter()
};
Authorization
For per-object authentication, just set HttpClient's default headers:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic","QWxhZGRpbjpvcGVuIHNlc2FtZQ==");
For per-request authentication, set a method or expression returning Task to AuthenticationHandler
method.
You can use Lambda syntax:
client.AuthenticationHandler = async (request) =>
{
request.Headers.Add("Authorization", "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");
}
You can use regular method syntax:
async Task AuthenticateRequestAsync(HttpRequestMessage request)
{
request.Headers.Add("Authorization", "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");
}
//And somethere else:
client.AuthenticationHandler = AuthenticateRequestAsync;
Error handling
Set a method or expression to ErrorHandler
property:
client.ErrorHandler = async (request, response) =>
{
//Use request and response object to determine which action to take
if (request.RequestUri.AbsolutePath.StartsWith("/api") && response.StatusCode == HttpStatusCode.Unauthorized)
{
//In this case we set Authentication global header...
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic","QWxhZGRpbjpvcGVuIHNlc2FtZQ==");
///...and then resend a copy of the request, then return its response.
return await client.SendAsync(request.Clone());
}
//If you don't wish to handle an error, just return back the response object
return response;
};
If there isn't an error handler or Response is null or unsuccessful after error handling, RestException
will be thrown:
try
{
var item = await client.RestGetAsync<Todo>("todos/800");
}
//Use RestException's Request, Response or Content properties to determine how to handle the Exception
catch (RestException ex) when (ex.Response?.StatusCode == HttpStatusCode.NotFound)
{
Console.WriteLine("Content not found.");
}
catch (RestException ex)
{
Console.WriteLine("Request failed, check out its content: ");
Console.Write(ex.Content);
throw;
}
Less common cases
For less common cases, write your request using the HttpRequestMessage
class and send it throuth one of the available RestSendAsync
overloads:
var json = "{ title: 'Lorem Ipsum', userId: 1 }";
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
Content = new StringContent(json, Encoding.UTF8, "application/json"),
RequestUri = new Uri("todos", UriKind.Relative)
};
var response = await client.RestSendAsync(request);
Assert.True(response.IsSuccessStatusCode);
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Newtonsoft.Json (>= 12.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.7.0-alpha | 6,488 | 4/8/2019 |
0.6.0-alpha | 377 | 3/28/2019 |
0.5.0-alpha | 435 | 3/19/2019 |
0.4.0-alpha | 369 | 3/19/2019 |
0.3.1-alpha | 375 | 3/19/2019 |
0.3.0-alpha | 374 | 3/19/2019 |
0.2.0-alpha | 770 | 3/18/2019 |
0.1.0-alpha | 548 | 3/18/2019 |