Lyo.Http.Client
2.0.0
dotnet add package Lyo.Http.Client --version 2.0.0
NuGet\Install-Package Lyo.Http.Client -Version 2.0.0
<PackageReference Include="Lyo.Http.Client" Version="2.0.0" />
<PackageVersion Include="Lyo.Http.Client" Version="2.0.0" />
<PackageReference Include="Lyo.Http.Client" />
paket add Lyo.Http.Client --version 2.0.0
#r "nuget: Lyo.Http.Client, 2.0.0"
#:package Lyo.Http.Client@2.0.0
#addin nuget:?package=Lyo.Http.Client&version=2.0.0
#tool nuget:?package=Lyo.Http.Client&version=2.0.0
Lyo.Http.Client
Generic HTTP transport for Lyo. Vendors (Endato, Typecast, ESPN, Discord, Google Maps) and Lyo.Http.Client.Flared sit on LyoHttpClient. Lyo API problem-details and Query/QueryProject stay on Lyo.Api.Client.
Register through IHttpClientFactory (AddLyoHttpClient<TClient, TOptions> returns IHttpClientBuilder). Do not singleton the client or call GetService<HttpClient>(). Tests may construct new LyoHttpClient(new HttpClient(stubHandler), options).
Features
ILyoHttpClient/LyoHttpClient. JSON verbs, GET DTO query strings, file upload/download with progress, request compression,LyoHttpExceptionon non-success (no problem-details).- Pipeline. Observe → metrics → rate limit (acquire) → timing (delay) → primary
LyoHttpClientHandler(decompress). Hosts chain Polly viaAddStandardResilienceHandler(). HttpClientPlanBuilder. The only fluent API.Build()serializes (typediscriminators).Commit()seals the open request;Get/Post/DownloadUrls/Delayauto-commit. Extract images/links/meta/json-ld/regex/table plusfilterList/mapList.- Session.
ILyoHttpCookieJar+ILyoHttpSession(cookies, pinned UA, items). Secrets stay in a runtime cookie file, not committed plan JSON.
Examples
Register a typed client
services.AddLyoHttpClient<EndatoClient, EndatoClientOptions>(configuration)
.AddStandardResilienceHandler();
Plan: extract then download
var plan = HttpClientPlanBuilder.New("gallery")
.Get("/gallery/{{slug}}")
.ThenExtractImages("imageUrls")
.ThenExtractLinks("zipUrls", extensionFilter: [".zip", ".pdf"])
.Commit()
.FilterList("imageUrls", "imageUrls", excludeRegex: "sprite|1x1")
.Commit()
.DownloadUrls("imageUrls", "{{downloadDir}}/img", "img")
.Build();
await client.RunAsync(plan, runtime, ct);
Architecture
Diagrams: HttpClientArchitecture.drawio — Overview (three paths as flowcharts), Request forks (handler chain → ThroughSolver vs StreamBinary), Handoff sequence (numbered hops). Open in diagrams.net or the Draw.io extension.
Pipeline order
Request flow: LyoHttpObserveHandler → LyoHttpMetricsHandler → LyoHttpRateLimitHandler (acquire a permit) → LyoHttpTimingHandler (delay) → LyoHttpClientHandler (or Flared/Clearance replacement) → optional host correlation sits outside this chain when added last → LyoHttpClient virtuals/hooks → per-request before.
A later ConfigurePrimaryHttpMessageHandler replaces decompression unless the replacement sets AutomaticDecompression.
Rate limit and timing
Both are off for generic/vendor clients. Lyo.Http.Client.Flared turns them on (token bucket 1/2s, 200–800 ms delay + jitter). Limiters are per named client / options type so Flared does not share Endato's bucket.
On HTTP 429 the rate-limit handler honors Retry-After (capped, jittered) then throws RateLimitExceededException.
Dependencies
Generated from ProjectReference / PackageReference (same model as docs/Lyo.ProjectGraph.html).
Lyo.Common.Core(direct, lyo)Lyo.Common.Json(direct, lyo)Lyo.Common.Metadata(direct, lyo)Lyo.Configuration(direct, lyo)Lyo.Exceptions(direct, lyo)Lyo.Metrics(direct, lyo)Lyo.Result(direct, lyo)AngleSharp1.5.0(direct, third-party)Microsoft.Extensions.Http10.0.5(direct, microsoft)Microsoft.Extensions.Logging.Abstractions10.0.5(direct, microsoft)System.Threading.RateLimiting10.0.5(direct, microsoft)Microsoft.Bcl.AsyncInterfaces10.0.5(transitive, microsoft, netstandard2.0)Microsoft.Extensions.Configuration.Binder10.0.5(transitive, microsoft)System.Memory4.6.3(transitive, microsoft, netstandard2.0)System.Text.Json10.0.5(transitive, microsoft, netstandard2.0)
| 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. net9.0 was computed. 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. |
| .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
- AngleSharp (>= 1.5.0)
- Lyo.Common.Json (>= 2.0.0)
- Lyo.Common.Metadata (>= 2.0.0)
- Lyo.Configuration (>= 2.0.0)
- Lyo.Exceptions (>= 2.0.0)
- Lyo.Metrics (>= 2.0.0)
- Lyo.Result (>= 2.0.0)
- Microsoft.Extensions.Http (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- System.Threading.RateLimiting (>= 10.0.5)
-
net10.0
- AngleSharp (>= 1.5.0)
- Lyo.Common.Json (>= 2.0.0)
- Lyo.Common.Metadata (>= 2.0.0)
- Lyo.Configuration (>= 2.0.0)
- Lyo.Exceptions (>= 2.0.0)
- Lyo.Metrics (>= 2.0.0)
- Lyo.Result (>= 2.0.0)
- Microsoft.Extensions.Http (>= 10.0.5)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.5)
- System.Threading.RateLimiting (>= 10.0.5)
NuGet packages (20)
Showing the top 5 NuGet packages that depend on Lyo.Http.Client:
| Package | Downloads |
|---|---|
|
Lyo.Api.Client
API client library for consuming Lyo APIs. |
|
|
Lyo.Web.Components
Blazor components library for the Lyo web UI framework with MudBlazor integration. |
|
|
Lyo.Discord.Client
Discord API client for querying Discord data via the Lyo API. |
|
|
Lyo.Config.Api.Client
HTTP client for the Lyo central Config API (conditional resolve, ETags, HTTP IConfigStore over manage routes). |
|
|
Lyo.Job.Client
HTTP client for the Lyo Job API and IMqService-backed job event publisher for scheduler/worker hosts. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.0 | 228 | 9/9/2026 |