Convert Result to Controller ActionResult
This helper methods simplifies the process of converting your application results to RESTful API responses.
public static class ControllerExtensions
{
public static IActionResult ToActionResult<T>(this Result<T> result)
{
if (result.IsSuccess)
{
return result.StatusCode switch
{
200 => new OkObjectResult(result.Value),
201 => new CreatedResult(string.Empty, result.Value),
204 => new NoContentResult(),
_ => new ObjectResult(result.Value) { StatusCode = result.StatusCode }
};
}
return result.StatusCode switch
{
400 => new BadRequestObjectResult(result.Error),
401 => new UnauthorizedObjectResult(result.Error),
403 => new ObjectResult(result.Error) { StatusCode = 403 }, // No ForbidResult with body
404 => new NotFoundObjectResult(result.Error),
409 => new ConflictObjectResult(result.Error),
_ => new ObjectResult(result.Error) { StatusCode = result.StatusCode }
};
}
public static IActionResult ToActionResult(this Result result)
{
if (result.IsSuccess)
{
return result.StatusCode switch
{
200 => new OkObjectResult(result),
201 => new CreatedResult(),
204 => new NoContentResult(),
_ => new ObjectResult(result) { StatusCode = result.StatusCode }
};
}
return result.StatusCode switch
{
400 => new BadRequestObjectResult(result.Error),
401 => new UnauthorizedObjectResult(result.Error),
403 => new ObjectResult(result.Error) { StatusCode = 403 }, // No ForbidResult with body
404 => new NotFoundObjectResult(result.Error),
409 => new ConflictObjectResult(result.Error),
_ => new ObjectResult(result.Error) { StatusCode = result.StatusCode }
};
}
}