Wracając do RC1, zrobiłbym to:
[HttpPost]
public IActionResult Post([FromBody]string something)
{
try{
// ...
}
catch(Exception e)
{
return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
}
}
W RC2 nie ma już HttpStatusCodeResult i nie mogę znaleźć niczego, co pozwalałoby mi zwrócić 500 typów IActionResult.
Czy podejście, które teraz pytam, jest zupełnie inne? Czy już nie próbujemy złapać Controller
kodu? Czy zezwalamy po prostu, aby środowisko generowało ogólny wyjątek 500 z powrotem do programu wywołującego API? W jaki sposób mogę zobaczyć dokładny stos wyjątków?
c#
asp.net-core
asp.net-core-mvc
Mickael Caruso
źródło
źródło
Możesz użyć
Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode
iMicrosoft.AspNetCore.Http.StatusCodes
sformułować swoją odpowiedź, jeśli nie chcesz zakodować określonych numerów.AKTUALIZACJA: sierpień 2019
Być może nie związane bezpośrednio z pierwotnym pytaniem, ale próbując osiągnąć ten sam wynik
Microsoft Azure Functions
, stwierdziłem, że muszę zbudować nowyStatusCodeResult
obiekt znaleziony wMicrosoft.AspNetCore.Mvc.Core
zestawie. Mój kod wygląda teraz tak;źródło
Jeśli potrzebujesz ciała w odpowiedzi, możesz zadzwonić
Zwróci to 500 z obiektem odpowiedzi ...
źródło
return StatusCode(StatusCodes.Status500InternalServerError, new { message = "error occurred" });
I oczywiście możesz dodać tak opisową wiadomość, jak chcesz, a także inne elementy.Lepszym sposobem radzenia sobie z tym już teraz (1,1) jest to zrobić w
Startup.cs
„sConfigure()
:Spowoduje to wykonanie trasy dla
/Error
. Pozwoli ci to uniknąć dodawania bloków „try-catch” do każdej pisanej akcji.Oczywiście musisz dodać ErrorController podobny do tego:
Więcej informacji tutaj .
Jeśli chcesz uzyskać rzeczywiste dane wyjątku, możesz dodać to do powyższego
Get()
tuż przedreturn
instrukcją.Powyżej fragmentu wzięty z bloga Scotta Saubera .
źródło
ExceptionHandler
oprogramowania pośredniego tutaj. Możesz oczywiście rzucić własną lub przedłużyć ją według własnego uznania. Oto link do źródeł . EDYCJA: Zobacz ten wiersz dlaIExceptionHandlerPathFeature
.Powinien być używany w kontekstach innych niż ASP.NET (zobacz inne odpowiedzi dla ASP.NET Core).
HttpStatusCode
jest wyliczeniem wSystem.Net
.źródło
Co powiesz na utworzenie niestandardowej klasy ObjectResult, która reprezentuje wewnętrzny błąd serwera, taki jak ten
OkObjectResult
? Możesz umieścić prostą metodę we własnej klasie bazowej, aby łatwo wygenerować InternalServerError i zwrócić ją tak jak tyOk()
lubBadRequest()
.źródło
Jeśli chcesz zwrócić odpowiedź JSON w MVC .Net Core Możesz również użyć:
Zwróci zarówno wynik JSON, jak i HTTPStatus. Używam go do zwracania wyników do jQuery.ajax ().
źródło
return new JsonResult ...
ale poza tym działało świetnie.W przypadku aspnetcore-3.1 można również użyć
Problem()
jak poniżej;https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
źródło