Я смущен тем, как справиться с этой ситуацией.
Обычно, когда возникает необработанное исключение ASP.Net, сервер отправляет обратно какое-либо сообщение HTML, либо обработчик ошибок Asp.Net по умолчанию, либо специальный обработчик ошибок. В любом случае, HTML отправляется обратно (и обычно это хорошая идея сделать страницу удобной для пользователя).
Однако у меня возникла проблема, когда необработанные исключения происходят в действиях контроллера Asp.net MVC, которые, как ожидается, возвратят JSON для вызовов Ajax. Когда javascript читает возвращенную страницу (которая является HTML вместо предполагаемого JSON), она вылетает из-за невозможности конвертировать ответ в JSON (сейчас я использую ExtJS). Я хочу, чтобы Json был возвращен при исключении, чтобы пользователь мог быть уведомлен о том, что произошла ошибка.
Единственное решение, о котором я могу думать, - сделать следующее в каждом действии, которое возвращает Json:
try { .... }
catch (Exception ex)
{
return Json(new { success = false, msg = ex.Message });
}
Мне не нравится этот метод, потому что он требует, чтобы я улавливал все исключения (что плохо по понятным причинам), и он требует, чтобы я перекачал каждое действие JsonResult
с тем же кодом обработки исключений (что затрудняет его изменение позже).
Есть ли лучший способ вернуть более подходящий результат ошибки только для методов действий, которые возвращают Json, но все же сохраняют регулярные страницы ошибок, удобные для веб-запросов без Ajax?