2013-06-21 2 views
1

Рассмотрите этот кусок кода.Как обрабатывать исключения, которые не выбрасываются контроллерами?

 protected void Application_Start() 
     { 
      InitLogger(); 

      InitAppContext(); 

      AreaRegistration.RegisterAllAreas(); 

      // WebApiConfig.Register(GlobalConfiguration.Configuration); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      AuthConfig.RegisterAuth();    
     } 

Скажем, исключение возникает в InitLogger.

Я вижу два решения для обработки этого:

  1. Используйте Application_Error события, чтобы сделать запрос перенаправления на какую страницу. Если я попробую этот подход, я получу Request is not available in this context
  2. Использовать <customErrors mode="On" defaultRedirect="Error.html" />. Если я попробую его получить http://localhost:1937/Error.html?aspxerrorpath=/

Как справиться с описанной ситуацией?

Спасибо.

PS: Чтобы обрабатывать исключения контроллеров (исключения и пользовательские исключения), я использовал фильтр, эта часть выполнена.

ответ

2

Оба решения говорят о перенаправлении запроса в другое место. Тем не менее, ваше исключение происходит при запуске приложения, и как таковой не существует запрос еще.

Если InitLogger() может генерировать исключение, заверните вызов в блок try/catch. Если вы можете каким-то образом обработать какое-либо исключение (например, возможно, у вас есть второй регистратор, который вы можете попробовать вместо этого, или ваше приложение может работать без регистратора), тогда идите и обработайте его. Если вы не можете, ну, ваше приложение не будет работать, и, поскольку вы не можете исправить его «на лету», вам нужно записывать, что пошло не так где-то (чтобы помочь вам разобраться позже). Например, вы можете записать ошибку в журнал событий, хотя обратите внимание, что это произойдет автоматически, если вы не поймаете исключение.