Unio.AspNetCore
1.2.1
Requires NuGet 2.12 or higher.
dotnet add package Unio.AspNetCore --version 1.2.1
NuGet\Install-Package Unio.AspNetCore -Version 1.2.1
<PackageReference Include="Unio.AspNetCore" Version="1.2.1" />
<PackageVersion Include="Unio.AspNetCore" Version="1.2.1" />
<PackageReference Include="Unio.AspNetCore" />
paket add Unio.AspNetCore --version 1.2.1
#r "nuget: Unio.AspNetCore, 1.2.1"
#:package Unio.AspNetCore@1.2.1
#addin nuget:?package=Unio.AspNetCore&version=1.2.1
#tool nuget:?package=Unio.AspNetCore&version=1.2.1
Unio.AspNetCore
ASP.NET Core integration for Unio discriminated unions.
Targets .NET 9, .NET 10 and .NET 11 RC1. Supports unions with 2–9 branches.
Native AOT
The package enables IsAotCompatible. For response bodies, pass a source-generated JSON context:
using System.Text.Json.Serialization;
using Unio;
using Unio.AspNetCore.MinimalApi;
using Unio.Types;
var builder = WebApplication.CreateSlimBuilder(args);
var app = builder.Build();
app.MapGet("/users/{id:int}", (int id) =>
{
Unio<User, NotFound> result = id == 1 ? new User(1, "Ada") : new NotFound();
return result.ToHttpResult(ApiJsonContext.Default);
});
app.Run();
public sealed record User(int Id, string Name);
[JsonSerializable(typeof(User))]
internal partial class ApiJsonContext : JsonSerializerContext;
Enable <PublishAot>true</PublishAot> in the application project and publish for a concrete runtime identifier. The context must contain every possible response body type, including concrete derived types. Marker responses and null values do not require JSON metadata; null produces an empty 200 response. Missing metadata throws NotSupportedException rather than falling back to reflection.
Alternatively, register the context through ConfigureHttpJsonOptions and use the existing parameterless ToHttpResult() overload. AOT applications must provide JSON metadata through one of these paths.
VerifyReferenceAotCompatibility is disabled only for this extension because Microsoft.AspNetCore.App references framework assemblies that lack AOT metadata. AOT/trim analyzers remain enabled. The runnable example validates native JSON execution in CI.
Minimal API Integration
Automatically maps Unio<...> types containing known marker types to HTTP status codes:
using Unio.AspNetCore.MinimalApi;
app.MapGet("/users/{id}", (int id, IUserService svc) =>
{
Unio<User, NotFound, Forbidden> result = svc.GetUser(id);
return result.ToHttpResult(); // User→200, NotFound→404, Forbidden→403
});
Convention Mapping
| Marker Type | HTTP Status |
|---|---|
BadRequest |
400 |
Unauthorized |
401 |
Forbidden |
403 |
NotFound |
404 |
Conflict |
409 |
Created |
201 |
Accepted |
202 |
NoContent |
204 |
| (other) | 200 OK |
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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. |
-
net10.0
- Unio (>= 1.2.1)
- Unio.Types (>= 1.2.1)
-
net11.0
- Unio (>= 1.2.1)
- Unio.Types (>= 1.2.1)
-
net9.0
- Unio (>= 1.2.1)
- Unio.Types (>= 1.2.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.