¿Cómo devolver HTTP 500 desde ASP.NET Core RC2 Web Api?
De vuelta en RC1, haría esto:
[HttpPost]
public IActionResult Post([FromBody]string something)
{
try{
// ...
}
catch(Exception e)
{
return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
}
}
En RC2, ya no lo hay HttpStatusCodeResult
y no puedo encontrar nada que me permita devolver un tipo 500 de IActionResult.
¿El enfoque ahora es completamente diferente para lo que estoy preguntando? ¿ Ya no intentamos capturar el Controller
código? ¿Dejamos que el marco arroje una excepción genérica 500 a la persona que llama a la API? Para el desarrollo, ¿cómo puedo ver la pila de excepciones exacta?
Por lo que puedo ver, hay métodos auxiliares dentro de la ControllerBase
clase. Solo usa el StatusCode
método:
[HttpPost]
public IActionResult Post([FromBody] string something)
{
//...
try
{
DoSomething();
}
catch(Exception e)
{
LogException(e);
return StatusCode(500);
}
}
También puedes utilizar la StatusCode(int statusCode, object value)
sobrecarga que también negocia el contenido.
Puede utilizar Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode
y Microsoft.AspNetCore.Http.StatusCodes
para formar su respuesta, si no desea codificar números específicos.
return StatusCode(StatusCodes.Status500InternalServerError);
ACTUALIZACIÓN: agosto de 2019
Quizás no esté directamente relacionado con la pregunta original, pero al intentar lograr el mismo resultado Microsoft Azure Functions
descubrí que tenía que construir un nuevo StatusCodeResult
objeto que se encuentra en el Microsoft.AspNetCore.Mvc.Core
ensamblaje. Mi código ahora se ve así;
return new StatusCodeResult(StatusCodes.Status500InternalServerError);
Si necesita un cuerpo en su respuesta, puede llamar
return StatusCode(StatusCodes.Status500InternalServerError, responseObject);
Esto devolverá un 500 con el objeto de respuesta.