Например, у нас есть простой метод действий, чтобы показать любую книгу с правильным ID:Автоматически выбросить 404 исключение из метода действия, если объект объект является нулевым
public ActionResult GetBook(int id) // id = 123456789
{
var book = dataManager.Books.GetBookById(id); // == null
logger.Info("Getting book with id " + book.Id);
return View(book);
}
Если id
параметр не действует, мы получаем ошибку 500, потому что нет книги с этим идентификатором.
Мы должны справиться с этой ситуацией вручную, если нам нужно, чтобы бросить сообщение об ошибке 404, как это:
if (book == null)
{
return HttpNotFound();
}
Можно ли переключить 500-ошибку 404-ошибки для всех методов действий где-то в веб-приложении (настраиваемый фильтр, конвейер запросов)?
Моя цель - показать ошибку конечного пользователя 404, если он запрашивает несуществующий объект, но должен показать ошибку 500 в любом другом случае. Я не могу понять, можно ли запрограммировать общую версию этой проверки где-то вне класса контроллера (и не копировать этот код в каждом методе действия). – user3172616
Невозможно, чтобы C# знал, что «book.Id» предназначен для выброса исключения «объект не найден», которое вы можете превратить в 404, а для 'someOtherObject.DoSomething()' для создания подлинного 'NullReferenceException' который вы раскрываете как 500. Если у вас есть много методов, которые выглядят одинаково, посмотрите на шаблоны, чтобы уменьшить дублирование. Но это еще один вопрос. – CodeCaster
Спасибо! Я думаю то же самое. Я использую инжекторы зависимостей, метод EF-кодов, все мои сущности, полученные из класса EntityBase. Таким образом, я могу поднять любой объект на базу в своем веб-приложении, когда я получу его из базы данных. – user3172616