MiddleMan.Zero.AspNetCore.Mvc
1.1.2
dotnet add package MiddleMan.Zero.AspNetCore.Mvc --version 1.1.2
NuGet\Install-Package MiddleMan.Zero.AspNetCore.Mvc -Version 1.1.2
<PackageReference Include="MiddleMan.Zero.AspNetCore.Mvc" Version="1.1.2" />
<PackageVersion Include="MiddleMan.Zero.AspNetCore.Mvc" Version="1.1.2" />
<PackageReference Include="MiddleMan.Zero.AspNetCore.Mvc" />
paket add MiddleMan.Zero.AspNetCore.Mvc --version 1.1.2
#r "nuget: MiddleMan.Zero.AspNetCore.Mvc, 1.1.2"
#:package MiddleMan.Zero.AspNetCore.Mvc@1.1.2
#addin nuget:?package=MiddleMan.Zero.AspNetCore.Mvc&version=1.1.2
#tool nuget:?package=MiddleMan.Zero.AspNetCore.Mvc&version=1.1.2
MiddleMan.Zero.AspNetCore.Mvc
ASP.NET Core MVC integration for MiddleMan.Zero, providing automatic conversion of Result and Result<TResponse> to IActionResult.
Features
- Automatic Result Conversion: Controllers can return
Resultobjects directly - ResultFilter: Automatically converts Result objects to appropriate HTTP responses
- Extension Methods: Manual conversion methods for fine-grained control
- HTTP Status Code Mapping:
Successful→ 200 OKNotFound→ 404 Not FoundInvalid→ 400 Bad RequestFailure→ 500 Internal Server Error
Installation
Add the package to your ASP.NET Core project:
dotnet add package MiddleMan.Zero.AspNetCore.Mvc
Usage
1. Register the ResultFilter (Automatic Conversion)
In your Program.cs or Startup.cs:
builder.Services
.AddMvc()
.AddMiddleManZeroResults();
// Or with AddMvcCore()
builder.Services
.AddMvcCore()
.AddMiddleManZeroResults();
2. Return Results Directly from Controllers
Once registered, you can return Result or Result<TResponse> directly from your controller actions:
[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
private readonly IHandleAsync<GetOrderRequest, Result<Order>> _getOrderHandler;
public OrdersController(IHandleAsync<GetOrderRequest, Result<Order>> getOrderHandler)
{
_getOrderHandler = getOrderHandler;
}
[HttpGet("{id}")]
public async Task<Result<Order>> GetOrder(int id)
{
// The ResultFilter automatically converts this to IActionResult
return await _getOrderHandler.HandleAsync(new GetOrderRequest { Id = id });
}
[HttpPost]
public async Task<Result> CreateOrder(CreateOrderRequest request)
{
// Non-generic Result is also supported
return await _createOrderHandler.HandleAsync(request);
}
}
3. Manual Conversion (Alternative)
If you prefer manual control, you can use the extension methods without registering the filter:
[HttpGet("{id}")]
public async Task<IActionResult> GetOrder(int id)
{
var result = await _getOrderHandler.HandleAsync(new GetOrderRequest { Id = id });
return result.ToActionResult();
}
[HttpGet("{id}/typed")]
public async Task<ActionResult<Order>> GetOrderTyped(int id)
{
var result = await _getOrderHandler.HandleAsync(new GetOrderRequest { Id = id });
return result.ToTypedActionResult();
}
Extension Methods
ToActionResult()
Converts a Result or Result<TResponse> to IActionResult:
IActionResult actionResult = result.ToActionResult();
ToTypedActionResult<TResponse>()
Converts a Result<TResponse> to ActionResult<TResponse> (provides better type safety):
ActionResult<Order> actionResult = result.ToTypedActionResult();
HTTP Status Code Mapping
| ResultStatus | HTTP Status Code | Response Body |
|---|---|---|
Successful (no data) |
200 OK | Empty |
Successful (with data) |
200 OK | Response object |
NotFound |
404 Not Found | { messages: [...] } |
Invalid |
400 Bad Request | { messages: [...] } |
Failure |
500 Internal Server Error | { messages: [...] } |
Undefined |
500 Internal Server Error | { messages: [...] } |
Examples
Successful Response with Data
var order = new Order { Id = 1, Total = 100.00m };
var result = new Result<Order>(order, ResultStatus.Successful, []);
// Returns: 200 OK with order object in body
Not Found Response
var messages = new[] { new NotFoundMessage { Message = "Order not found" } };
var result = new Result<Order>(null, ResultStatus.NotFound, messages);
// Returns: 404 Not Found with { messages: [...] }
Validation Error Response
var messages = new[] { new InvalidRequestMessage("Invalid order ID") };
var result = new Result<Order>(null, ResultStatus.Invalid, messages);
// Returns: 400 Bad Request with { messages: [...] }
License
MIT
| 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
- MiddleMan.Zero (>= 1.1.2)
-
net8.0
- MiddleMan.Zero (>= 1.1.2)
-
net9.0
- MiddleMan.Zero (>= 1.1.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.2 | 91 | 2/28/2026 |
| 1.1.2-rc.1 | 45 | 2/28/2026 |
| 1.1.1 | 90 | 2/18/2026 |
| 1.1.0 | 90 | 2/15/2026 |
| 1.0.0 | 97 | 2/5/2026 |