OneOfToActionResult Extensions (MVC OneOf Support β v1.22.0)
One-liner MVC controllers for discriminated union returns
// BEFORE β manual .Match() for every OneOf return
[HttpPost]
public async Task<IActionResult> Create([FromBody] CreateOrderRequest request)
{
var result = await _service.CreateOrderAsync(request);
return result.Match(
notFound => new NotFoundObjectResult(notFound.Message) as IActionResult,
conflict => new ConflictObjectResult(conflict.Message),
validation => new ObjectResult(validation.Message) { StatusCode = 422 },
order => new OkObjectResult(order));
}
// AFTER β one-liner, domain errors auto-mapped
[HttpPost]
public async Task<IActionResult> Create([FromBody] CreateOrderRequest request)
=> (await _service.CreateOrderAsync(request)).ToActionResult();
// NotFoundError β 404, ConflictError β 409, ValidationError β 422, success β 200
Uses the same two-phase error mapping as OneOfToIResult:
1. Phase 1: Checks IError.Tags["HttpStatusCode"] for tag-based mapping
2. Phase 2: Falls back to type-name heuristic (NotFound β 404, Conflict β 409, etc.)