Mediarq.AspNetCore
1.5.1
dotnet add package Mediarq.AspNetCore --version 1.5.1
NuGet\Install-Package Mediarq.AspNetCore -Version 1.5.1
<PackageReference Include="Mediarq.AspNetCore" Version="1.5.1" />
<PackageVersion Include="Mediarq.AspNetCore" Version="1.5.1" />
<PackageReference Include="Mediarq.AspNetCore" />
paket add Mediarq.AspNetCore --version 1.5.1
#r "nuget: Mediarq.AspNetCore, 1.5.1"
#:package Mediarq.AspNetCore@1.5.1
#addin nuget:?package=Mediarq.AspNetCore&version=1.5.1
#tool nuget:?package=Mediarq.AspNetCore&version=1.5.1
Mediarq.AspNetCore
Map a Mediarq Result / Result<T> straight to an ASP.NET Core response — 200/Ok on success, or
RFC 7807 ProblemDetails on failure with a status derived from the ResultError category.
dotnet add package Mediarq.AspNetCore
Usage
No registration needed — just call the extension methods on the Result returned by Send.
Minimal API:
app.MapPost("/orders", (CreateOrder cmd, ISender sender) => sender.Send(cmd).ToHttpResultAsync());
app.MapGet("/orders/{id:guid}", (Guid id, ISender sender) => sender.Send(new GetOrder(id)).ToHttpResultAsync());
MVC controller:
[HttpPost]
public Task<IActionResult> Create(CreateOrder cmd) => mediator.Send(cmd).ToActionResultAsync();
Status mapping: NotFound → 404, Validation → 400, Conflict → 409, Unauthorized → 401,
Forbidden → 403, otherwise 400/500 as appropriate. A validation failure renders the property errors as
a ProblemDetails errors dictionary.
Automatic endpoint mapping — app.MapMediarq()
Skip the pass-through endpoint entirely: annotate the command/query itself, and map every annotated type in one call.
[MediarqPost("/orders")]
public record CreateOrder(string Customer) : ICommand<Result<Guid>>;
[MediarqGet("/orders/{id}")]
public record GetOrder(Guid Id) : IQuery<Result<OrderDto>>;
[MediarqDelete("/orders/{id}")]
public record DeleteOrder(Guid Id) : ICommand; // no result -> 204 on success
app.MapMediarq(typeof(CreateOrder).Assembly);
[MediarqGet]/[MediarqDelete]— no request body; the request's members are bound individually from the route/query string ([AsParameters]), soGetOrder(Guid Id)above bindsIdfrom{id}.[MediarqPost]/[MediarqPut]/[MediarqPatch]— the whole request is bound from the JSON body.- The response is converted the same way
ToHttpResultAsync()does above; a no-resultICommandmaps a successful dispatch to204 No Content. Any other response type throwsInvalidOperationExceptionat startup — annotating a type that isn'tResult/Result<T>/a no-resultICommandis a configuration mistake, not something to fail silently on. - Returns a
RouteGroupBuilder, so shared conventions apply to every mapped endpoint at once:app.MapMediarq(...).RequireAuthorization().WithTags("orders");.
Learn more
MIT © Nicolas Rouffart
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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 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. |
-
net10.0
- Mediarq.Core (>= 1.5.1)
-
net8.0
- Mediarq.Core (>= 1.5.1)
-
net9.0
- Mediarq.Core (>= 1.5.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Mediarq.AspNetCore:
| Package | Downloads |
|---|---|
|
Mediarq
Lean meta-package bundling Mediarq.Core and the lightweight extensions: ASP.NET Core, FluentValidation, DataAnnotations, Caching, Diagnostics and UnitOfWork. Heavy or opinionated integrations (EntityFrameworkCore, OpenTelemetry, MassTransit, Polly) ship as separate packages — install them explicitly when you need them. |
GitHub repositories
This package is not used by any popular GitHub repositories.