De retour dans RC1, je ferais ceci:
[HttpPost]
public IActionResult Post([FromBody]string something)
{
try{
// ...
}
catch(Exception e)
{
return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
}
}
Dans RC2, il n'y a plus HttpStatusCodeResult, et il n'y a rien que je puisse trouver qui me permette de renvoyer un type 500 de IActionResult.
L'approche est-elle maintenant entièrement différente de ce que je demande? N'essayons-nous plus d'attraper dans le Controller
code? Laissons-nous simplement le framework renvoyer une exception générique 500 à l'appelant d'API? Pour le développement, comment puis-je voir la pile d'exceptions exacte?
c#
asp.net-core
asp.net-core-mvc
Mickael Caruso
la source
la source
Vous pouvez utiliser
Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode
etMicrosoft.AspNetCore.Http.StatusCodes
pour former votre réponse, si vous ne souhaitez pas coder en dur des numéros spécifiques.MISE À JOUR: août 2019
Peut-être pas directement lié à la question d'origine, mais en essayant d'obtenir le même résultat avec,
Microsoft Azure Functions
j'ai constaté que je devais construire un nouvelStatusCodeResult
objet trouvé dans l'Microsoft.AspNetCore.Mvc.Core
assemblage. Mon code ressemble maintenant à ceci;la source
Si vous avez besoin d'un corps dans votre réponse, vous pouvez appeler
Cela renverra un 500 avec l'objet de réponse ...
la source
return StatusCode(StatusCodes.Status500InternalServerError, new { message = "error occurred" });
Et bien sûr, vous pouvez ajouter un message aussi descriptif que vous le souhaitez, ainsi que d'autres éléments.Une meilleure façon de gérer cela à partir de maintenant (1.1) est de le faire dans
Startup.cs
'sConfigure()
:Cela exécutera la route pour
/Error
. Cela vous évitera d'ajouter des blocs try-catch à chaque action que vous écrivez.Bien sûr, vous devrez ajouter un ErrorController similaire à celui-ci:
Plus d'informations ici .
Si vous souhaitez obtenir les données d'exception réelles, vous pouvez l'ajouter à ce qui précède
Get()
juste avant l'return
instruction.Ci-dessus, extrait du blog de Scott Sauber .
la source
ExceptionHandler
middleware ici. Vous pouvez, bien entendu, rouler le vôtre ou l'étendre comme bon vous semble. Voici le lien vers les sources . EDIT: Voir cette ligne pourIExceptionHandlerPathFeature
.Doit être utilisé dans des contextes non-ASP.NET (voir les autres réponses pour ASP.NET Core).
HttpStatusCode
est une énumération dansSystem.Net
.la source
Que diriez-vous de créer une classe ObjectResult personnalisée qui représente une erreur de serveur interne comme celle pour
OkObjectResult
? Vous pouvez mettre une méthode simple dans votre propre classe de base afin de pouvoir facilement générer InternalServerError et la renvoyer comme vous le faitesOk()
ouBadRequest()
.la source
Lorsque vous souhaitez renvoyer une réponse JSON dans MVC .Net Core, vous pouvez également utiliser:
Cela renverra à la fois le résultat JSON et HTTPStatus. Je l'utilise pour renvoyer les résultats à jQuery.ajax ().
la source
return new JsonResult ...
mais autrement fonctionnait très bien.Pour aspnetcore-3.1, vous pouvez également utiliser
Problem()
comme ci-dessous;https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
la source