如何处理控制器未抛出的异常?

时间:2013-06-21 13:24:54

标签: asp.net-mvc asp.net-mvc-4

考虑这段代码。

        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=/
  3. 如何处理描述的情况?

    感谢。

    PS:为了处理控制器异常(http异常和自定义异常),我使用了一个过滤器,该部分已完成。

1 个答案:

答案 0 :(得分:2)

您的解决方案都谈到将请求重定向到其他地方。但是,您的异常发生在应用程序启动时,因此尚未 一个请求。

如果InitLogger()可以抛出异常,请将调用包装在try / catch块中。如果您可以以某种方式处理异常(例如,您可能会尝试使用第二个记录器,或者您的应用程序可以在没有记录器的情况下运行),那么请继续处理它。如果你不能,那么 - 你的应用程序无法运行,并且由于你无法动态修复它,你需要记录某些地方出了什么问题(以帮助你稍后调查)。例如,您可以将错误写入事件日志,但请注意,如果您没有捕获异常,这将自动发生。