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 Controller
có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.StatusCode
yMicrosoft.AspNetCore.Http.StatusCodes
para 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 nuevoStatusCodeResult
objeto encontrado en elMicrosoft.AspNetCore.Mvc.Core
ensamblaje. 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 lareturn
declaración.Fragmento anterior tomado del blog de Scott Sauber .
fuente
ExceptionHandler
middleware 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).
HttpStatusCode
es 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