¿Cómo devolver HTTP 500 desde ASP.NET Core RC2 Web Api?

Resuelto Mickael Caruso asked hace 8 años • 13 respuestas

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 HttpStatusCodeResulty 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 Controllercó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?

Mickael Caruso avatar Jun 13 '16 22:06 Mickael Caruso
Aceptado

Por lo que puedo ver, hay métodos auxiliares dentro de la ControllerBaseclase. Solo usa el StatusCodemé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.

Federico Dipuma avatar Jun 13 '2016 15:06 Federico Dipuma

Puede utilizar Microsoft.AspNetCore.Mvc.ControllerBase.StatusCodey Microsoft.AspNetCore.Http.StatusCodespara 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 Functionsdescubrí que tenía que construir un nuevo StatusCodeResultobjeto que se encuentra en el Microsoft.AspNetCore.Mvc.Coreensamblaje. Mi código ahora se ve así;

return new StatusCodeResult(StatusCodes.Status500InternalServerError);
Edward Comeau avatar Oct 21 '2016 10:10 Edward Comeau

Si necesita un cuerpo en su respuesta, puede llamar

return StatusCode(StatusCodes.Status500InternalServerError, responseObject);

Esto devolverá un 500 con el objeto de respuesta.

David McEleney avatar Oct 04 '2018 06:10 David McEleney