ASP.NET MVC / Web API 2 adapters for Knight.Response — convert Result/Result<T> to IActionResult/IHttpActionResult with optional RFC7807 ProblemDetails.
$ dotnet add package Knight.Response.MvcKnight.Response.Mvc integrates Knight.Response with ASP.NET MVC / Web API 2 (System.Web on .NET Framework 4.7.1+), providing consistent API responses with standardized result-to-HTTP mapping. It includes ProblemDetails compatibility, validation error shaping, and factory helpers.
This package is the MVC counterpart to Knight.Response.AspNetCore, designed for legacy projects that cannot move to ASP.NET Core but still want modern structured response handling.
Extension Methods
ResultExtensions → Convert Result / Result<T> into IActionResultServiceCollectionExtensions → Register Knight.Response services for MVCFactories
ApiResults → Helpers to return success, failure, unauthorized, forbidden, etc.ProblemFactory → Builds RFC 7807-compatible ProblemDetails and ValidationProblemDetailsInfrastructure
CompatProblemDetails → ProblemDetails implementation compatible with MVC / Web API 2CompatValidationProblemDetails → Modern validation error details for MVCOptions
KnightResponseOptions → Configurable response shaping (problem details, validation, exception details)ResultHttpResolver → Central mapping from Result.Status / ResultCode → HTTP status codesdotnet add package Knight.Response.Mvc --version 2.0.0-preview03
Dependencies:
Knight.Response (core results)Knight.Response.Abstractions.Http (shared HTTP abstractions)Microsoft.AspNetCore.Mvc (2.2.0) — referenced for schema compatibility (ProblemDetails, ValidationProblemDetails), runtime not required.Register in Startup.cs:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var services = new ServiceCollection();
services.AddKnightResponse(); // from ServiceCollectionExtensions
}
}
public class AccountsController : ApiController
{
[HttpGet]
public IHttpActionResult GetAccount(string id)
{
var result = _accountService.GetById(id);
return result.ToOkActionResult();
}
[HttpPost]
public IHttpActionResult Create(CreateAccountRequest request)
{
var result = _accountService.Create(request);
return result.ToCreatedActionResult();
}
}
Controlled by KnightResponseOptions.IncludeFullResultPayload:
false (default):
Ok → returns Value (for Result<T>) onlyCreated / Accepted → Value onlytrue → returns the full Result object (with codes/messages)
UseValidationProblemDetails is true and field errors are mapped → returns ValidationProblemDetailsStatus code resolution order:
CodeToHttp (domain ResultCode → HTTP)StatusCodeResolver (default: Failed=400, Cancelled=409, Error=500)public sealed class KnightResponseOptions
: KnightResponseBaseOptions<HttpContext, ProblemDetails, ValidationProblemDetails>
{
// Core properties:
// - IncludeFullResultPayload (default: false)
// - UseProblemDetails (default: false)
// - UseValidationProblemDetails (default: false)
// - IncludeExceptionDetails (default: false)
// - CodeToHttp (optional)
// - StatusCodeResolver (default mapping provided)
// - ValidationMapper (optional override)
// - ProblemDetailsBuilder, ValidationBuilder (hooks)
}
HttpContext.RequestServicesValidationMapper override in optionsDefaultValidationErrorMapperMIT License — see LICENSE.
Contributions welcome! See CONTRIBUTING.md.