Webority.Delivery.AspNetCore 0.34.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Webority.Delivery.AspNetCore --version 0.34.2
                    
NuGet\Install-Package Webority.Delivery.AspNetCore -Version 0.34.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="Webority.Delivery.AspNetCore" Version="0.34.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Webority.Delivery.AspNetCore" Version="0.34.2" />
                    
Directory.Packages.props
<PackageReference Include="Webority.Delivery.AspNetCore" />
                    
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 Webority.Delivery.AspNetCore --version 0.34.2
                    
#r "nuget: Webority.Delivery.AspNetCore, 0.34.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 Webority.Delivery.AspNetCore@0.34.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=Webority.Delivery.AspNetCore&version=0.34.2
                    
Install as a Cake Addin
#tool nuget:?package=Webority.Delivery.AspNetCore&version=0.34.2
                    
Install as a Cake Tool

Webority.Delivery.AspNetCore

How a Webority Razor head ships its bytes:

  • Brotli-first response compression, so Cloudflare delivers Brotli instead of passing IIS gzip through.
  • Static files with the fleet cache policy: versioned files a year (never immutable), unversioned files an hour in the browser and a month at the edge, the version marker never stored.
  • Cloudflare edge-cache headers: the origin decides what the edge may cache; anonymous, cookie-free pages are cacheable, everything else is no-store.
services.AddWeborityDelivery();

app.UseWeborityDelivery();                     // replaces UseResponseCompression + UseStaticFiles
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseWeborityCloudflareCache(cacheOptions);  // Cloudflare-fronted heads

Endpoints that own their caching carry [OwnCacheControl].

Static assets can also be served from Cloudflare R2, opt-in per head. Without the StaticAssets section, deployables.json and static-build.json, every file is served from the site as before, and asp-append-version writes ?v= with 12 hex characters of the file's sha256. A head with <WeborityStaticAssets>true</WeborityStaticAssets> links authored files through IStaticAssets.Url("<key>"). With StaticAssets:BuildOrigin set, every asp-append-version URL for a file in the release's static-build.json points at /_static/<head>/<set>/. A setting the head's files cannot honour fails at startup. Add IStaticAssets.CspSources to the CSP, and never add MapStaticAssets.

A host without pages (Azure Functions, a worker) links authored files through the Webority.Delivery package and AddWeborityStaticAssets.

API heads answer every failure as an RFC 9457 problem details body in the fleet profile (application/problem+json: type, title, status, detail, code, traceId, plus errors on a validation failure), and expose an honest /health:

services.AddWeborityErrorHandling(options =>
{
    options.ProblemTypeBaseUri = new Uri("https://api.example.com/problems/");
    options.AddProblemType("invoice_locked", 409, "This invoice is locked.");
    options.Map<InvoiceLockedException>("invoice_locked", "This invoice is locked.");
});
services.AddWeborityIdempotency<AppDbContext>();   // opt-in: [Idempotent] POST/PATCH run once per Idempotency-Key
services.AddWeborityMinAppVersion();               // opt-in: announces Min-App-Version, never refuses

app.UseWeborityErrorHandling();                // first in the pipeline
app.UseWeborityMinAppVersion();                // after UseCors
app.UseWeborityIdempotency();                  // after UseAuthorization
endpoints.MapWeborityHealth();                 // anonymous, no-store, never rate limited

return this.Failure("employee_only", "Only employees can open this.");

Clients read detail and code. A reused Idempotency-Key with a different request answers 422.

Preconditions and retirement, each opt-in per endpoint:

Response.SetEntityTag(version);                // read: ETag
[RequireIfMatch]                               // write: 428 without If-Match, 400 when unusable, 412 on a clash
[DeprecatedEndpoint("2026-11-01", SunsetOn = "2027-05-01")]   // Deprecation and Sunset headers

Every DateTimeOffset in a JSON body is written as UTC ending in Z. Our own headers carry no X- prefix (WeborityHeaders); the analyzer rule WEB006 flags one written with it.

The package's analyzer checks API code in the build (WEB001 ProblemDetails, WEB002 anonymous or string error bodies, WEB003 a local exception handler, WEB004 exception text in a response, WEB005 an action or page handler with no authorization attribute, WEB006 an X- header of our own) against a per-project ceiling in .webority/baselines/api-rules-baseline.json that only shrinks. With no file every finding fails; dotnet build --no-incremental -p:WeborityApiRulesSeed=true prints each project's counts (WEB102) to seed it. The analyzer targets netstandard2.0 and needs Microsoft.CodeAnalysis.CSharp 4.14.0 or later.

services.AddWeborityHealthChecks<AppDbContext>() registers the database and data-protection checks; query.ToPagedDataObjectAsync(page, pageSize, ct) returns the fleet paged list { items, page, pageSize, totalCount, totalPages }. A request derived from PagedListRequest exposes ResolvedPage (1 when absent or below 1) and ResolvedPageSize (20 when absent or below 1, never over 100) for services that page without a queryable; the defaults are the public constants PagedListRequest.DefaultPageSize and PagedListRequest.MaxPageSize, the same ones the helper uses.

Server-side DataTables lists bind the 1.10 POST and reach only the members a handler names:

services.AddWeborityDataTables();

public async Task<IActionResult> OnPostRowsAsync(IDataTablesRequest request, CancellationToken ct)
{
    var rows = db.Partners.Select(p => new { p.Code, p.FirmName, p.ContactEmail });
    int filtered = await rows.ApplySearch(request, "code,firmName,contactEmail").CountAsync(ct);
    var page = rows.ApplySearch(request, "code,firmName,contactEmail")
        .ApplySorting(request, "code,firmName")
        .ApplyPaging(request);
    return new DataTablesJsonResult(request.CreateResponse(await rows.CountAsync(ct), filtered, await page.ToListAsync(ct)));
}
Product Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on Webority.Delivery.AspNetCore:

Package Downloads
Webority.Support.AspNetCore

The customer support API for Webority products: MapWeboritySupportEndpoints adds ticket list, detail, create, reply, reopen, rating, file download and contact settings as one route group the product secures.

Webority.Webhooks.Inbound.AspNetCore

ASP.NET Core endpoint for Webority.Webhooks.Inbound: one anonymous POST route per source that checks the sender's signature, stores the body and answers the sender.

Webority.Chat.AspNetCore

The Webority Chat routes for one surface: profile, conversations, messages streamed as Server-Sent Events, input requests, actions, ratings and attachments, with the feature filter, the captcha gate, named rate-limit policies and RFC 9457 problems with fixed codes.

Webority.Chat.Speech

The Azure Speech adapter for Webority Chat: short-lived tokens over managed identity for dictation and read-aloud.

Webority.Chat.Support

The support bridge for Webority Chat: handoff from the assistant to a person, ticket and handoff parts, open tickets on start and away notifications, over Webority.Support. It serves no staff page; the agent console is Webority.Chat.Support.Admin.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.36.0 0 11/5/2026
0.35.1 573 11/5/2026
0.35.0 61 11/5/2026
0.34.2 1,224 11/4/2026
0.34.1 118 11/4/2026
0.34.0 172 11/4/2026
0.33.2 93 11/4/2026
0.33.1 93 11/4/2026
0.33.0 188 11/4/2026
0.32.0 162 11/4/2026
0.31.2 563 11/3/2026
0.31.1 200 11/3/2026
0.31.0 145 11/3/2026
0.30.0 447 11/3/2026
0.29.4 120 11/3/2026
0.29.3 406 11/2/2026
0.29.2 169 11/2/2026
0.29.1 295 11/2/2026
0.29.0 377 11/2/2026
0.28.1 192 11/2/2026
Loading failed