Ваш код не должен генерировать исключение для взаимодействия с пользователем, он должен генерировать исключение, чтобы уведомить более высокий уровень кода о том, что произошло что-то неустранимое.
Теперь, в зависимости от того, что произошло, вы можете захотеть ответить определенным кодом состояния HTTP.Но в этот момент вы не выдаваете исключения , чтобы вызвать ошибку сервера, вы перехватываете исключений и даете пользователю соответствующий ответ.
Если вопросыто, что должно произойти, когда запрашивается статья / блог / элемент / и т.д., которая не существует - ну, если для кода, ответственного за отображение информации, возможно просто установить код ответа, то, конечно, неиспользовать исключения.
Если вы используете инфраструктуру MVC, и ваши отдельные контроллеры могут установить код ответа, тогда разрешите им.
И если самый верхний обработчик исключений может использовать http-код ответа, чтобы лучше представить сообщение об ошибке пользователю, то разрешите его.