RestEase 1.5.2

Easy-to-use typesafe REST API client library, which is simple and customisable.
   
Write a C# interface which describes your API, and RestEase generates an implementation you can call into.

Source Generators are here! Reference the RestEase.SourceGenerator NuGet package.

Install-Package RestEase -Version 1.5.2
dotnet add package RestEase --version 1.5.2
<PackageReference Include="RestEase" Version="1.5.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add RestEase --version 1.5.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: RestEase, 1.5.2"
For F# scripts that support #r syntax, copy this into the source code to reference the package.

Release Notes

Changelog
=========

v1.5.2
------

- SourceGenerator: Add `<auto-generated>` comment to generated files, to keep StyleCop et al happy (#174)
- HttpClientFactory: fix types not being correctly registered (#175)

v1.5.1
------

- RestEase.SourceGenerator is out of preview!
- Add support for `[BaseAddress]`
- Improve how content headers behave: if a method has a `[Body]` parameter, contents headers are always sent
- HttpClientFactory: allow passing a RequestModifier to AddRestEaseClient (#164)
- HttpClientFactory: add overloads which take a Uri
- .NET 5: Add `RestClient.HttpRequestMessageRequestInfoOptionsKey` for use with `HttpClient.Options`
- Minor bug fixes

v1.5.0
------

- Support content-related headers on a method, even if the method doesn't specify a body (#156)
- Add the RestEase.SourceGenerator NuGet package (currently in preview)
- Add the RestEase.HttpClientFactory NuGet package

v1.4.12
-------

- Add support for multiple raw query strings (#151)
- Add netstandard1.2 target
- README improvements


v1.4.11
-------

- Add extended formats for property headers and header params (#123)
- Make RequestInfo available to the RequestModifier (#133)
- Add Nullable Reference Type annotations
- README improvements (#127, #129, #132, #135, #138)

v1.4.10
-------

- Add `[BasePath]` (#113)

v1.4.9
------

- Support custom path parameter/property serialization (thanks to @sharparam). This is useful for enums (#95)
- Support setting `HttpRequestMessage.Proprties` through properties and parameters (thanks to @Husqvik) (#116)
- Allow request body headers to be sent, if the body is null (#109)

v1.4.8
------

- Avoid deadlock in ModifyingHttpClientHandler (#115)
- Avoid crash if a user's HttpClientHandler returns a HttpResponseMessage with a null body (#108)
- Add assembly name to generated type name, to avoid conflicts when two assemblies both use the same interface (#108)
- Improve README (#107, #111)

v1.4.7
------

- Fix crash introduced by (#98) when a method has a non-primitive struct type with a default value

v1.4.6
------

- Fixed ignored QueryAttribute.Name when set using property setter (`[Query(Name = "customName")`)(#94)
- If type creation fails, make sure all subsequent attempts throw the same exception (#93)
- Support `byte[]` bodies (#91)
- Support generic methods (as well as generic interfaces) (#92)
- Support netstandard2.0 as a separate target (reduces dependencies for netstandard2.0+ projects) (#88)
- Reflect optional parameters in implementation for IronPython (#98)

v1.4.5
------

- Fix memory leak (#74)
- Allow a custom class to be used to control query param serialization (#61)
- Make sure HttpResponseMessage is properly disposed (this wasn't causing a memory leak) (#82)
- Add query properties (#70)

v1.4.4
------

- Ensure that methods which return `Task` properly dispose of the underlying `HttpResponseMessage` (#65)

v1.4.3
------

- Add support for `Task<Stream>` responses (#56)
- Various README improvements (#53, #55, #58, #59)

v1.4.2
------

- Move to abstract base classes for custom serializers and deserializers
- Add MethodInfo to the IRequestInfo, and pass to custom serializers and deserializers. This allows custom serializers and deserializers to look at e.g. custom attributes on the method which was called (#51)
- Allow an `IFormatProvider` to be specified, which overrides the culture on the thread which calls RestEase's methods (#49)
- Reduce json.net dependency version to 6.0.1 for net45 (#52)
- Add `RestClient.For(Type type, IRequester requester)` overload (#43)

v1.4.1
------

- Fix bug where unicode characters were incorrectly double-encoded (#46)
- Add support for `IRequester` properties (#38)
- Add non-generic `RestClient.For(Type type)` overload (#43)

v1.4.0
------

- **BREAKING CHANGE**: Remove support for .NET 4.0. Microsoft.Bcl.Async does not work well with csproj-based .NET Core projects
- Add information about the request to ApiException (#30)
- Work around an issue when running on Mono which caused a double '??' in URLs (#35)

v1.3.3
------

- Don't crash if a `[Header]` attribute on a method is used to remove one specified on the interface / on a property (#29)
- Add `RestClient` overloads which take a `Uri` (#27)

v1.3.2
------

- Add support for netstandard1.1

v1.3.1
------

- If you make your interface `IDisposable`, disposing it will dispose the underlying `HttpClient`
- If your method return type is `Task<HttpResponseMessage>`, use `HttpCompletionOption.ResponseHeadersRead` instead of `HttpCompletionOption.ResponseContentRead`, allowing you to control if and when the content is read.
- Add support for the HTTP Patch method
- Add `[Path(UrlEncode = false)]`, allowing URL encoding to be turned off for individual path parameters
- Remove the dependency on all of NetStandard.Library (for .NET Core targets)

v1.3.0
------

- **BREAKING CHANGE**: Add a `RequestQueryParamSerializerInfo` parameter to methods on `IRequestQueryParamSerializer`
- Add support for specifying `IFormattable` format strings for query parameters, path parameters, and path properties (#21)

v1.2.3
------

- Allow null BaseAddress on HttpClient
- Make ApiException constructor public, to allow easier unit testing of RestEase consumers

v1.2.1, v1.2.2
--------------

- Fix metadata fields in NuGet package (no functional changes)

v1.2.0
------

- Add support for path properties - path compoments which are the same for every request (#16)
- Add support for raw, unencoded query parameters (#17)
- Support query parameters without a key
- Improve some error messages

v1.1.2
------

- Avoid dependency on System.Net.Http NuGet package on .NET 4.5

v1.1.1
------

- Avoid dependency on Microsoft.Net.Http on .NET 4.5

v1.1.0
------

- Add support for .NET Core (.NET Standard 1.3) - thanks to [Fazouane Marouane](https://github.com/fazouane-marouane)

v1.0.11
-------

- Fix a test

v1.0.10
-------

- Do encode '/' in path parameters

v1.0.9
------

- Encode space as '%20' rather than '+' in path parameters
- Don't encode '/' in path parameters

v1.0.8
------

- Fix issue where query parameters not decorated with `[Query]` would always be serialized as ToString, regardless of any `[SerializationMethod]` attributes

v1.0.7
------

- Handle null paths (e.g. `[Post]` or `[Get(null)]`)

v1.0.6
------

- Support .NET 4.0 (using Microsoft.Net.Http and Microsoft.Bcl.Async as dependencies)
- URL Encode path parameters

v1.0.5
------

- Allow custom serialization of query parameters and query maps
- Add `[SerializationMethods]` attribute, to specify the default serialization method for bodies and query parameters
- Move to using a builder pattern for `RestClient`, to make specifying custom serializers/deserializations/configuration easier.
  The old methods are still present, but are marked as deprecated. Please upgrade to the new methods (suggested by the deprecation messages).

v1.0.4
------

- Fix race condition when creating implementations (#4)

1.0.3
-----

- Allow interface headers in interface inheritance (#3)
- Add missing `RestClient.For` overloads

1.0.2
-----

- Allow interface inheritance (#3)

1.0.1
-----

- `JsonRequestBodySerializer` sets a default Content-Type header of `application/json`

1.0.0
-----

- Initial Release

NuGet packages (89)

Showing the top 5 NuGet packages that depend on RestEase:

Package Downloads
WireMock.Net.RestClient
A RestClient using RestEase to access the admin interface.
HRMS.Common
Package Description
Convey.HTTP.RestEase
Convey.HTTP.RestEase
Stl.Fusion.Client
Client-side components of Stl.Fusion - a new implementation of "computed observables" designed to power distributed apps. Thread-safe, asynchronous, immutable, and ready to serve replicas of computed instances to remote clients.
Blip.HttpClient
BLiP Extensions' extensions to include logs, including a TCP/HTTP ISender factory

GitHub repositories (9)

Showing the top 5 popular GitHub repositories that depend on RestEase:

Repository Stars
canton7/SyncTrayzor
Windows tray utility / filesystem watcher / launcher for Syncthing
asc-lab/dotnetcore-microservices-poc
Very simplified insurance sales system made in a microservices architecture using .NET Core
servicetitan/Stl.Fusion
Get real-time UI updates in Blazor apps and 10-1000x faster API responses with a novel approach to distributed reactive computing. Fusion brings computed observables and automatic dependency tracking from Knockout.js/MobX/Vue to the next level by enabling a single dependency graph span multiple servers and clients, including Blazor apps running in browser.
canton7/Stylet
A very lightweight but powerful ViewModel-First MVVM framework for WPF for .NET Framework and .NET Core, inspired by Caliburn.Micro.
snatch-dev/Convey
A simple recipe for .NET Core microservices.

Version History

Version Downloads Last updated
1.5.2 32,641 12/17/2020
1.5.1 11,910 12/3/2020
1.5.0 196,341 6/30/2020
1.4.12 108,447 4/26/2020
1.4.11 65,073 4/4/2020
1.4.10 535,080 7/27/2019
1.4.9 208,191 4/28/2019
1.4.8 4,435 4/24/2019
1.4.7 1,129,051 8/13/2018
1.4.6 2,356 8/12/2018
1.4.5 169,973 3/9/2018
1.4.4 491,611 9/19/2017
1.4.3 34,397 8/20/2017
1.4.2 54,988 8/6/2017
1.4.1 106,896 6/9/2017
1.4.0 15,740 4/22/2017
1.3.3 5,999 3/13/2017
1.3.2 10,928 2/2/2017
1.3.1 3,764 12/9/2016
1.3.0 215,300 11/10/2016
1.2.3 994 11/3/2016
1.2.2 3,524 9/19/2016
1.2.1 991 9/18/2016
1.2.0 932 9/16/2016
1.1.2 2,060 8/7/2016
1.1.1 1,361 8/6/2016
1.0.11 1,380 6/9/2016
1.0.8 1,688 4/11/2016
1.0.7 1,589 3/2/2016
1.0.6 3,224 12/23/2015
1.0.5 1,212 11/25/2015
1.0.4 923 10/26/2015
1.0.3 1,364 10/3/2015
1.0.2 962 10/1/2015
1.0.1 2,922 8/4/2015
1.0.0 1,205 5/22/2015
0.9.3 894 5/19/2015
0.9.2 884 5/19/2015
0.9.1 905 5/19/2015