Webority.Delivery.AspNetCore 0.31.1

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

The live agent console for Webority Chat support, under a ChatSupport area the staff head secures with one policy. Customer heads take Webority.Chat.Support alone and serve no staff page.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.36.0 1,046 11/5/2026
0.35.1 1,023 11/5/2026
0.35.0 72 11/5/2026
0.34.2 1,256 11/4/2026
0.34.1 123 11/4/2026
0.34.0 174 11/4/2026
0.33.2 94 11/4/2026
0.33.1 95 11/4/2026
0.33.0 190 11/4/2026
0.32.0 164 11/4/2026
0.31.2 564 11/3/2026
0.31.1 201 11/3/2026
0.31.0 146 11/3/2026
0.30.0 451 11/3/2026
0.29.4 120 11/3/2026
0.29.3 408 11/2/2026
0.29.2 170 11/2/2026
0.29.1 296 11/2/2026
0.29.0 381 11/2/2026
0.28.1 193 11/2/2026
Loading failed