Какова наилучшая стратегия обработки необработанных исключений (ответов с ошибкой 500) в действиях Asp.Net MVC для запросов Ajax?

Я не понимаю, как справиться с этой ситуацией.

Обычно, когда возникает необработанное исключение ASP.Net, сервер отправляет обратно HTML-сообщение какого-либо типа, либо Asp по умолчанию. Чистый обработчик ошибок или пользовательский обработчик ошибок. В любом случае 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?

14
задан KallDrexx 19 January 2011 в 15:10
поделиться