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 hay HttpStatusCodeResult, y no hay nada que pueda encontrar que me permita devolver un tipo 500 de IActionResult.
¿El enfoque ahora es completamente diferente para lo que estoy preguntando? ¿Ya no intentamos atrapar el Controllercódigo? ¿Dejamos que el marco arroje una excepción genérica 500 al llamador API? Para el desarrollo, ¿cómo puedo ver la pila de excepción exacta?
c#
asp.net-core
asp.net-core-mvc
Mickael Caruso
fuente
fuente

Puede usar
Microsoft.AspNetCore.Mvc.ControllerBase.StatusCodeyMicrosoft.AspNetCore.Http.StatusCodespara formar su respuesta, si no desea codificar números específicos.ACTUALIZACIÓN: agosto de 2019
Quizás no esté directamente relacionado con la pregunta original, pero al tratar de lograr el mismo resultado
Microsoft Azure Functions, descubrí que tenía que construir un nuevoStatusCodeResultobjeto encontrado en elMicrosoft.AspNetCore.Mvc.Coreensamblaje. Mi código ahora se ve así;fuente
Si necesita un cuerpo en su respuesta, puede llamar
Esto devolverá un 500 con el objeto de respuesta ...
fuente
return StatusCode(StatusCodes.Status500InternalServerError, new { message = "error occurred" });Y, por supuesto, puede agregar un mensaje tan descriptivo como desee, y también otros elementos.Una mejor manera de manejar esto a partir de ahora (1.1) es hacer esto en
Startup.cs'sConfigure():Esto ejecutará la ruta para
/Error. Esto le ahorrará agregar bloques try-catch a cada acción que escriba.Por supuesto, deberá agregar un ErrorController similar a este:
Más información aquí .
En caso de que desee obtener los datos de excepción reales, puede agregar esto a lo anterior
Get()justo antes de lareturndeclaración.Fragmento anterior tomado del blog de Scott Sauber .
fuente
ExceptionHandlermiddleware aquí. Por supuesto, puede rodar el suyo o extenderlo como mejor le parezca. Aquí está el enlace a las fuentes . EDITAR: Vea esta línea paraIExceptionHandlerPathFeature.Debe usarse en contextos que no sean ASP.NET (consulte otras respuestas para ASP.NET Core).
HttpStatusCodees una enumeración enSystem.Net.fuente
¿Qué tal crear una clase ObjectResult personalizada que represente un error interno del servidor como el indicado
OkObjectResult? Puede poner un método simple en su propia clase base para que pueda generar fácilmente el InternalServerError y devolverlo tal como lo haceOk()oBadRequest().fuente
Cuando desee devolver una respuesta JSON en MVC .Net Core También puede usar:
Esto devolverá el resultado JSON y HTTPStatus. Lo uso para devolver resultados a jQuery.ajax ().
fuente
return new JsonResult ...pero por lo demás funcionó muy bien.Para aspnetcore-3.1, también puede usar lo
Problem()siguiente;https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
fuente