Рекомендации по обработке ошибок asp.net mvc

Я ищу стандартный способ обработки ошибок в asp.net mvc 2.0 или 3.0

  • 404 обработчик ошибок
  • Обработчик ошибок исключения области контроллера
  • Обработчик ошибок исключения глобальных областей

Ответы

Ответ 1

Для ошибок области контроллера попробуйте использовать настраиваемый атрибут Exception i.e.

public class RedirectOnErrorAttribute : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {

        // Don't interfere if the exception is already handled
        if(filterContext.ExceptionHandled)
        return;

        //.. log exception and do appropriate redirects here

     }
}

Затем украсьте контроллеры атрибутом, и обработка ошибок должна быть вашей

[RedirectOnError]
public class TestController : Controller
{
     //.. Actions etc...
}

Не помогает, если ошибка связана с маршрутизацией, т.е. она не может найти контроллер в первую очередь. Для этого попробуйте обработчик ошибки приложения в Global.asax i.e.

 protected void Application_Error(object sender, EventArgs e)
 {
      //.. perhaps direct to a custom error page is here
 }

Я не знаю, была ли это "лучшая практика". Работает.

Ответ 2

Не знаете о лучших практиках и в зависимости от того, что вы хотите сделать с ошибкой, может ли простым решением не использовать параметр customErrors в файле web.config?

Для обнаружения необработанных ошибок я иногда использую метод Application_Error в файле Global.asax.

Кроме того, посмотрите на сообщение SO <

Ответ 3

Здесь - самый подробный ответ на часть вашего вопроса 404. Несмотря на основную тему, это 404, это даст вам представление о том, как применить это к другим типам ошибок.

Хотя я не могу четко сформулировать это как "наилучшую практику", так как вам понадобится контроллер супертипа уровня с этим подходом. Я лучше поймаю те HttpException в Global.asax. Но по большей части это отличный гид.

Что касается произвольных исключений в вашем MVC-приложении, не забывайте о HandleErrorAttribute.