Базовый класс Microsoft.AspNetCore.Mvc.Controller
не имеет эквивалента BadRequest()
, Ok()
, NoContent()
и т. д. Для возврата кодов состояния HTTP 500.
Почему мы не можем?
try{
oops();
}
catch(Excpetion e){
//some handling
return InternalServerError(e);
}
Я знаю, что умеет return StatusCode(500);
, но мы стараемся быть более последовательными с нашими кодами HTTP и хотели бы знать, есть ли что-то более согласованное с Ok()
для возврата кода 500?
Вы всегда можете установить код ответа вручную. Response.StatusCode = 500;
ASP.NET Core 2.x не имеет метода InternalServerError. Вместо этого вы можете включить следующую библиотеку.
using Microsoft.AspNetCore.Http;
А затем используйте следующий код.
return new StatusCodeResult(StatusCodes.Status500InternalServerError);
Или, если вы хотите добавить исключение вместе с ответом, попробуйте следующий код
var result = StatusCode(StatusCodes.Status500InternalServerError, exception);
return result;
Если по какой-то причине вам нужно сохранить обратную совместимость api с 'InternalServerError', вы можете использовать Microsoft.AspNetCore.Mvc.WebApiCompatShim, но усилие по добавлению пакета - это больше, чем рефакторинг вашего кода к тому, который опубликовал Фойзул. nuget.org/packages/Microsoft.AspNetCore.Mvc.WebApiCompatShim
Если вы, как и я, не поняли, откуда берется метод StatusCode в ответе Рикардо, этот код будет работать точно так же:
var errorObjectResult = new ObjectResult(exceptionMessage);
errorObjectResult.StatusCode = StatusCodes.Status500InternalServerError;
return errorObjectResult;
Это то же самое. 500 = внутренняя ошибка сервера. Вы всегда можете создать метод быстрого расширения, если хотите.