CSharpEssentials.Http 3.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package CSharpEssentials.Http --version 3.0.2
                    
NuGet\Install-Package CSharpEssentials.Http -Version 3.0.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CSharpEssentials.Http" Version="3.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CSharpEssentials.Http" Version="3.0.2" />
                    
Directory.Packages.props
<PackageReference Include="CSharpEssentials.Http" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CSharpEssentials.Http --version 3.0.2
                    
#r "nuget: CSharpEssentials.Http, 3.0.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CSharpEssentials.Http@3.0.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CSharpEssentials.Http&version=3.0.2
                    
Install as a Cake Addin
#tool nuget:?package=CSharpEssentials.Http&version=3.0.2
                    
Install as a Cake Tool

CSharpEssentials.Http

CSharpEssentials.Http bridges HttpClient to the Result pattern. It turns HTTP calls into type-safe, functional results with automatic status-code-to-error mapping, fluent request builders, and Polly resilience integration.

🚀 Features

  • Result-based HTTP calls: GetFromJsonAsResultAsync, PostAsJsonAsResultAsync, PutAsJsonAsResultAsync, PatchAsJsonAsResultAsync, DeleteAsResultAsync, SendAsResultAsync
  • Automatic error mapping: HTTP status codes mapped to ErrorType (Validation, Unauthorized, Forbidden, NotFound, Conflict, Unexpected)
  • JSON integration: Uses EnhancedJsonSerializerOptions from CSharpEssentials.Json by default
  • Null-safe deserialization: Empty or null response bodies yield a structured NotFound error
  • Fluent request builder: Chain methods to build and execute requests declaratively
  • Query string helpers: Build URIs with query parameters from dictionaries or anonymous objects
  • Polly resilience: Retry, timeout, and circuit breaker pipelines ready to use

📦 Installation

dotnet add package CSharpEssentials.Http

🛠 Usage

1. GET Request as Result

using CSharpEssentials.Http;
using CSharpEssentials.ResultPattern;

HttpClient client = new() { BaseAddress = new Uri("https://api.example.com") };

Result<User> userResult = await client.GetFromJsonAsResultAsync<User>(new Uri("/users/1", UriKind.Relative));

userResult.Match(
    onSuccess: user => Console.WriteLine(user.Name),
    onFailure: errors => Console.WriteLine(errors[0].Description)
);

2. POST, PUT, PATCH Requests as Result

var payload = new { Name = "Alice", Age = 30 };

Result<User> postResult = await client.PostAsJsonAsResultAsync<User>(
    new Uri("/users", UriKind.Relative),
    payload);

Result<User> putResult = await client.PutAsJsonAsResultAsync<User>(
    new Uri("/users/1", UriKind.Relative),
    payload);

Result<User> patchResult = await client.PatchAsJsonAsResultAsync<User>(
    new Uri("/users/1", UriKind.Relative),
    new { Age = 31 });

3. DELETE and Raw Send as Result

Result deleteResult = await client.DeleteAsResultAsync(new Uri("/users/1", UriKind.Relative));

using var request = new HttpRequestMessage(HttpMethod.Head, new Uri("/health", UriKind.Relative));
Result headResult = await client.SendAsResultAsync(request);

4. Status Code Mapping

using System.Net;
using CSharpEssentials.Http;

ErrorType type = HttpStatusCodeMapper.ToErrorType(HttpStatusCode.NotFound);
// type == ErrorType.NotFound

Error error = HttpStatusCodeMapper.ToError(HttpStatusCode.BadRequest);
// error.Code == "Http.400"

5. Query String Builder

Uri baseUri = new("https://api.example.com/search");

// Single parameter
Uri uri1 = baseUri.WithQueryString("q", "csharp");

// Multiple parameters from dictionary
var filters = new Dictionary<string, string?> { { "page", "1" }, { "limit", "10" } };
Uri uri2 = baseUri.WithQueryString(filters);

// From anonymous object
Uri uri3 = baseUri.WithQueryString(new { Sort = "desc" });

6. HttpRequestBuilder (Fluent API)

Result<User> result = await HttpRequestBuilder
    .Get("/users/1")
    .WithHeader("Accept", "application/json")
    .WithHeader("x-api-key", "secret")
    .WithQuery("include", "profile")
    .AsResultAsync<User>(client);

Result created = await HttpRequestBuilder
    .Post("/users")
    .WithJsonContent(new { Name = "Bob" })
    .AsResultAsync(client);

7. Polly Resilience Pipelines

using CSharpEssentials.Http;
using Polly;

// Retry + Timeout combined
var pipeline = HttpClientResilienceExtensions.CreateResiliencePipeline(
    maxRetryAttempts: 3,
    timeout: TimeSpan.FromSeconds(30),
    retryDelay: TimeSpan.FromSeconds(1));

Result<User> result = await pipeline.ExecuteAsResultAsync(async token =>
    await client.GetFromJsonAsResultAsync<User>(new Uri("/users/1"), cancellationToken: token));

// Individual pipelines
ResiliencePipeline retryOnly = HttpClientResilienceExtensions.CreateRetryPipeline(maxRetryAttempts: 3);
ResiliencePipeline timeoutOnly = HttpClientResilienceExtensions.CreateTimeoutPipeline(TimeSpan.FromSeconds(10));

8. HttpContent Extensions

using HttpResponseMessage response = await client.GetAsync(uri);

Result<string> textResult = await response.Content.ReadAsStringAsResultAsync();
Result<User> jsonResult = await response.Content.ReadFromJsonAsResultAsync<User>();
Product 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.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed.  net11.0 is compatible. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on CSharpEssentials.Http:

Package Downloads
CSharpEssentials

A comprehensive C# library enhancing functional programming capabilities with type-safe monads (Maybe, Result), discriminated unions (Any), and robust error handling. Features include: domain-driven design support, enhanced Entity Framework integration, testable time management, JSON utilities, and LINQ extensions. Built for modern C# development with focus on maintainability, testability, and functional programming principles.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.0.4 3 5/6/2026
3.0.3 33 5/5/2026
3.0.2 74 5/5/2026