Webority.Delivery.AspNetCore 0.29.3

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

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.38.0 0 11/8/2026
0.37.2 0 11/8/2026
0.37.1 0 11/8/2026
0.37.0 0 11/8/2026
0.36.1 1,265 11/7/2026
0.36.0 4,010 11/5/2026
0.35.1 1,043 11/5/2026
0.35.0 74 11/5/2026
0.34.2 1,288 11/4/2026
0.34.1 124 11/4/2026
0.34.0 176 11/4/2026
0.33.2 96 11/4/2026
0.33.1 96 11/4/2026
0.33.0 191 11/4/2026
0.32.0 165 11/4/2026
0.31.2 568 11/3/2026
0.31.1 201 11/3/2026
0.31.0 146 11/3/2026
0.30.0 454 11/3/2026
0.29.3 411 11/2/2026
Loading failed