Zurück in RC1 würde ich das tun:
[HttpPost]
public IActionResult Post([FromBody]string something)
{
try{
// ...
}
catch(Exception e)
{
return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
}
}
In RC2 gibt es kein HttpStatusCodeResult mehr, und ich kann nichts finden, mit dem ich einen IActionResult-Typ vom Typ 500 zurückgeben kann.
Ist der Ansatz jetzt für das, was ich frage, völlig anders? Versuchen wir nicht mehr, Controller
Code einzufangen ? Lassen wir das Framework nur eine generische 500-Ausnahme an den API-Aufrufer zurückwerfen? Wie kann ich für die Entwicklung den genauen Ausnahmestapel anzeigen?
c#
asp.net-core
asp.net-core-mvc
Mickael Caruso
quelle
quelle
Sie können Ihre Antwort verwenden
Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode
undMicrosoft.AspNetCore.Http.StatusCodes
formulieren, wenn Sie bestimmte Nummern nicht fest codieren möchten.UPDATE: August 2019
Vielleicht nicht direkt mit der ursprünglichen Frage verbunden, aber als
Microsoft Azure Functions
ich versuchte, das gleiche Ergebnis mit zu erzielen, stellte ich fest, dass ich ein neuesStatusCodeResult
Objekt konstruieren musste, das in derMicrosoft.AspNetCore.Mvc.Core
Baugruppe gefunden wurde. Mein Code sieht jetzt so aus.quelle
Wenn Sie einen Körper in Ihrer Antwort benötigen, können Sie anrufen
Dies gibt eine 500 mit dem Antwortobjekt zurück ...
quelle
return StatusCode(StatusCodes.Status500InternalServerError, new { message = "error occurred" });
Natürlich können Sie auch eine beliebige beschreibende Nachricht und andere Elemente hinzufügen.Ein besserer Weg , dies zu handhaben als jetzt (1.1) ist dies in zu tun
Startup.cs
istConfigure()
:Dadurch wird die Route für ausgeführt
/Error
. Dies erspart Ihnen das Hinzufügen von Try-Catch-Blöcken zu jeder Aktion, die Sie schreiben.Natürlich müssen Sie einen ähnlichen ErrorController hinzufügen:
Weitere Informationen hier .
Wenn Sie die tatsächlichen Ausnahmedaten abrufen möchten, können Sie diese
Get()
direkt vor derreturn
Anweisung oben hinzufügen .Oben ein Ausschnitt aus Scott Saubers Blog .
quelle
ExceptionHandler
Middleware. Sie können natürlich Ihre eigenen rollen oder sie nach Belieben erweitern. Hier ist der Link zu den Quellen . BEARBEITEN: Siehe diese Zeile fürIExceptionHandlerPathFeature
.Sollte in Nicht-ASP.NET-Kontexten verwendet werden (siehe andere Antworten für ASP.NET Core).
HttpStatusCode
ist eine Aufzählung inSystem.Net
.quelle
Wie wäre es mit dem Erstellen einer benutzerdefinierten ObjectResult-Klasse, die einen internen Serverfehler wie den für darstellt
OkObjectResult
? Sie können eine einfache Methode in Ihre eigene Basisklasse einfügen, damit Sie den InternalServerError einfach generieren und genau wie SieOk()
oder zurückgeben könnenBadRequest()
.quelle
Wenn Sie eine JSON-Antwort in MVC .Net Core zurückgeben möchten, können Sie auch Folgendes verwenden:
Dies gibt sowohl das JSON-Ergebnis als auch HTTPStatus zurück. Ich verwende es, um Ergebnisse an jQuery.ajax () zurückzugeben.
quelle
return new JsonResult ...
aber ansonsten hat es super funktioniert.Für aspnetcore-3.1 können Sie auch
Problem()
wie folgt verwenden ;https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
quelle