Вернувшись в RC1, я бы сделал это:
[HttpPost]
public IActionResult Post([FromBody]string something)
{
try{
// ...
}
catch(Exception e)
{
return new HttpStatusCodeResult((int)HttpStatusCode.InternalServerError);
}
}
В RC2 больше нет HttpStatusCodeResult, и я не могу найти ничего, что позволило бы мне возвращать тип 500 типа IActionResult.
Подход сейчас совершенно другой для того, что я спрашиваю? Разве мы больше не пытаемся поймать Controller
код? Мы просто позволяем фреймворку генерировать общее исключение 500 обратно в вызывающую функцию API? Для разработки, как я могу увидеть точный стек исключений?
c#
asp.net-core
asp.net-core-mvc
Микаэль Карузо
источник
источник
Вы можете использовать
Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode
иMicrosoft.AspNetCore.Http.StatusCodes
для формирования своего ответа, если вы не хотите жестко задавать конкретные номера.ОБНОВЛЕНИЕ: август 2019
Возможно, это не имеет прямого отношения к исходному вопросу, но, пытаясь достичь того же результата,
Microsoft Azure Functions
я обнаружил, что мне нужно создать новыйStatusCodeResult
объект, найденный вMicrosoft.AspNetCore.Mvc.Core
сборке. Мой код теперь выглядит так;источник
Если вам нужно тело в вашем ответе, вы можете позвонить
Это вернет 500 с объектом ответа ...
источник
return StatusCode(StatusCodes.Status500InternalServerError, new { message = "error occurred" });
и, конечно, вы можете добавить как описательное сообщение, как вам нравится, так и другие элементы.Лучший способ справиться с этим , как сейчас (1.1) , чтобы сделать это в
Startup.cs
«sConfigure()
:Это выполнит маршрут для
/Error
. Это избавит вас от добавления блоков try-catch к каждому написанному вами действию.Конечно, вам нужно добавить ErrorController, похожий на этот:
Больше информации здесь .
Если вы хотите получить фактические данные об исключениях, вы можете добавить их к вышеприведенному
Get()
прямо передreturn
оператором.Выше фрагмент взят из блога Скотта Саубера .
источник
ExceptionHandler
промежуточное ПО здесь. Вы можете, конечно, свернуть свой собственный или расширить его по своему усмотрению. Вот ссылка на источники . РЕДАКТИРОВАТЬ: Смотрите эту строку дляIExceptionHandlerPathFeature
.Должен использоваться в не-ASP.NET контекстах (см. Другие ответы для ASP.NET Core).
HttpStatusCode
перечисление вSystem.Net
.источник
Как насчет создания пользовательского класса ObjectResult, который представляет внутреннюю ошибку сервера, такую как для
OkObjectResult
? Вы можете поставить простой метод в вашем собственном базовом классе , так что вы можете легко сгенерировать InternalServerError и вернуть его так же , как вы делаетеOk()
илиBadRequest()
.источник
Если вы хотите вернуть ответ JSON в MVC .Net Core, вы также можете использовать:
Это вернет как JSON-результат, так и HTTPStatus. Я использую его для возврата результатов в jQuery.ajax ().
источник
return new JsonResult ...
но в остальном работал отлично.Для aspnetcore-3.1 вы также можете использовать,
Problem()
как показано ниже;https://docs.microsoft.com/en-us/aspnet/core/web-api/handle-errors?view=aspnetcore-3.1
источник