RestSharp

GitHub

Simple REST and HTTP API Client for .NET

9,831 stars C# Markdown CodeWiki
AI Prompts & Endpoints
CodeWiki Knowledge Base

Repository: restsharp/RestSharp


Stars: 9826

CLAUDE.md

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Build & Test Commands

bash

Build


dotnet build RestSharp.slnx -c Debug

Run all tests


dotnet test RestSharp.slnx -c Debug

Run tests for a specific TFM


dotnet test RestSharp.slnx -f net9.0

Run a single test by fully-qualified name


dotnet test test/RestSharp.Tests/RestSharp.Tests.csproj --filter "FullyQualifiedName=RestSharp.Tests.ObjectParserTests.ShouldUseRequestProperty" -f net8.0

Pack


dotnet pack src/RestSharp/RestSharp.csproj -c Release -o nuget -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg

Note: dotnet test with .slnx does not work with net8.0. To run tests targeting net8.0, use individual project files: dotnet test test/RestSharp.Tests/RestSharp.Tests.csproj -f net8.0

Project Overview

RestSharp is a lightweight HTTP API client library for .NET that wraps HttpClient. It provides default parameters, multiple parameter types (query, URL segment, header, cookie, body), built-in JSON/XML/CSV serialization, and authentication support.

Repository Layout

- src/RestSharp/ — Core library
- src/RestSharp.Serializers.NewtonsoftJson/ — Newtonsoft.Json serializer adapter
- src/RestSharp.Serializers.Xml/ — Custom XML serializer
- src/RestSharp.Serializers.CsvHelper/ — CsvHelper serializer adapter
- src/RestSharp.Extensions.DependencyInjection/ — DI integration
- gen/SourceGenerator/ — Custom incremental source generators
- test/RestSharp.Tests/ — Unit tests
- test/RestSharp.Tests.Integrated/ — Integration tests (WireMock-based)
- test/RestSharp.Tests.Serializers.*/ — Serializer-specific tests

Architecture

Core Classes

- RestClient (RestClient.cs, split into partials RestClient.*.cs) — Main entry point. Wraps HttpClient, holds ReadOnlyRestClientOptions, RestSerializers, and DefaultParameters. Thread-safe when configured via RestClientOptions.
- RestRequest (Request/RestRequest.cs) — Request container with fluent API via extension methods in RestRequest*.cs files. Parameters split by type: query, body, header, URL segment, cookie, file.
- RestResponse / RestResponse\<T\> (Response/RestResponse*.cs) — Response containers with public setters. [GenerateClone] generates a static factory to copy base properties from RestResponse into RestResponse<T>.
- RestClientOptions (Options/RestClientOptions.cs) — Mutable configuration class. An immutable ReadOnlyRestClientOptions wrapper is generated by [GenerateImmutable].

Request Pipeline

ExecuteAsync → build request → interceptor chain (BeforeRequestBeforeHttpRequest → send → AfterHttpRequestAfterRequest) → deserialization → error handling. Interceptors are configured via RestClientOptions.Interceptors.

Parameter System (Parameters/)

Abstract Parameter record base with concrete types: HeaderParameter, QueryParameter, BodyParameter, UrlSegmentParameter, FileParameter, GetOrPostParameter, CookieParameter. ObjectParser converts objects to parameters via reflection.

Serialization (Serializers/)

ISerializer/IDeserializer interfaces. RestSerializers manages serializers by DataFormat enum (Json, Xml, Csv). Default: SystemTextJsonSerializer. Configured via ConfigureSerialization delegate in client constructors.

Authentication (Authenticators/)

IAuthenticator with single Authenticate(IRestClient, RestRequest) method. Built-in: HttpBasicAuthenticator, JwtAuthenticator, OAuth1/OAuth2 authenticators. Set via RestClientOptions.Authenticator.

Source Generators (gen/SourceGenerator/)

- [GenerateImmutable] — Creates read-only wrapper (used on RestClientOptions)
- [GenerateClone] — Creates static factory clone methods (used on RestResponse<T>)
- [Exclude] — Excludes properties from immutable generation
- Generator target must be netstandard2.0. Inspect output in obj/<Config>/<TFM>/generated/SourceGenerator/.

Multi-Targeting

Library: netstandard2.0, net471, net48, net8.0, net9.0, net10.0
Tests: net48 (Windows only), net8.0, net9.0, net10.0

Use conditional compilation for TFM-specific APIs: #if NET, #if NET8_0_OR_GREATER. System.Text.Json is a NuGet dependency on older TFMs but built-in on net8.0+.

Code Style & Conventions

- C# version: preview (latest features)
- Nullable: Enabled in /src, disabled in /test
- License header required in all /src files (Apache-2.0, see .github/copilot-instructions.md for exact text)
- Strong-named assemblies via RestSharp.snk
- Partial classes for large types, linked via <DependentUpon> in csproj
- Package versions centrally managed in Directory.Packages.props — don't pin in individual projects
- Versioning via MinVer from git tags (no hardcoded versions)
- Follow .editorconfig for formatting

Testing

- Stack: xUnit + FluentAssertions + AutoFixture
- HTTP mocking: WireMock.Net (avoid live endpoints)
- Global usings in test projects: Xunit, FluentAssertions, AutoFixture
- Guard TFM-specific tests with #if NET8_0_OR_GREATER
- Test results: test-results/<TFM>/<ProjectName>.trx

Documentation

Docusaurus 3 site in docs/. Dev server: cd docs && pnpm start. See DOCUMENTATION.md for full details on structure, versioning, and writing docs.

Working with Issues

- Avoid changing default behavior unless absolutely necessary
- Avoid breaking the existing API
- Leave existing tests intact to catch regressions; add new tests for fixed cases


README.md

RestSharp - Simple .NET REST Client

![](https://img.shields.io/nuget/dt/RestSharp) ![](https://www.nuget.org/packages/RestSharp) ![](https://www.nuget.org/packages/RestSharp#versions-body-tab)

RestSharp is a lightweight HTTP API client library. It's a wrapper around HttpClient, not a full-fledged client on
its own.

What RestSharp adds to HttpClient:
- Default parameters of any kind, not just headers
- Add a parameter of any kind to requests, like query, URL segment, header, cookie, or body
- Multiple ways to add a request body, including JSON, XML, URL-encoded form data, multipart form data with and
without files
- Built-in serialization and deserilization of JSON, XML, and CSV, as well as the ability to add custom serializers
- Rich support for authentication

Compatibility note

RestSharp 107 was a major release that brings a lot of changes. We've removed a lot of legacy code and added new
features. Finally, RestSharp has moved to HttpClient. We also deprecated the following:
- SimpleJson in favour of System.Text.Json.JsonSerialzer
- IRestRequest, and IRestResponse in favour of implementing classes
- Everything Http and IHttp as those are just wrappers
- Client configuration moved to RestClientOptions to make the client thread-safe
- IRestClient interface surface substantially reduced

Most of the client and some of the request options are now in RestClientOptions.

Check v107+ docs for more information.

Packages

| Package | What it's for |
|----------------------------------------|--------------------------------------------------------------------------------------|
| RestSharp | The core library, including System.Text.Json serializer and basical XML serializer |
| RestSharp.Serializers.NewtonsoftJson | Use Newtonsoft.Json as a JSON serializer |
| RestSharp.Serializers.Xml | Use custom RestSharp XML serializer for XML |
| RestSharp.Serializers.CsvHelper | Use CsvHelper as a CSV serializer |

Code of Conduct

This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.
For more information see the .NET Foundation Code of Conduct.

Users violated the aforementioned code of conduct will be blocked.

Support

RestSharp is an open-source project with a single maintainer. Do not expect your issue to be resolved unless it concerns a large group of RestSharp users.
The best way to resolve your issue is to fix it yourself. Fork the repository and submit a pull request.
You can also motivate the maintainer by sponsoring this project.

Contribute

Please read CONTRIBUTING.md for details on the process for reporting issues and submitting pull requests.

Get help

Read the docs: [Official Site][1]

Ask a question on StackOverflow with the tag restsharp.

Join RestSharp Discord server: ![Discord](https://discord.gg/NdpzHZ2qep)

Find RestSharp on Twitter: [@RestSharp][2]

Community

.NET Foundation

This project is a part of the .NET Foundation.

Code Contributors

This project exists thanks to all the people who contribute.
<img src="https://opencollective.com/RestSharp/contributors.svg?width=890&button=false">

Financial Contributors

Become a financial contributor and help us sustain our community. Contribute

License

Apache License 2.0

[1]: https://restsharp.dev
[2]: https://twitter.com/RestSharp
[3]: https://github.com/restsharp/RestSharp/issues