c# – 如何处理Global.asax Application_Start中的错误?
发布时间:2020-12-15 05:39:18 所属栏目:百科 来源:网络整理
导读:为了在用户访问网站时始终向用户显示“友好”错误页面,我在Global.asax页面中有一个全能,大多数错误都由过滤器处理,这似乎是首选方法.在大多数情况下,这很好.但是,在Application_Start期间,Application_Error事件(可以理解)不会被触发. 我的Application_Star
为了在用户访问网站时始终向用户显示“友好”错误页面,我在Global.asax页面中有一个全能,大多数错误都由过滤器处理,这似乎是首选方法.在大多数情况下,这很好.但是,在Application_Start期间,Application_Error事件(可以理解)不会被触发.
我的Application_Start事件包含一些依赖于服务调用的初始化代码,因此容易定义的故障点是服务因任何原因而不可用.我发现解决这个问题的唯一方法是执行以下操作. private static Exception StartUpException; protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); Initialise(); } private void Initialise() { StartUpException = null; try { Bootstrapper.Initialise(); } catch (Exception ex) { StartUpException = ex; } } 然后我在Application_BeginRequest中有以下代码 protected void Application_BeginRequest(object sender,EventArgs e) { if (StartUpException != null) { HandleErrorAndRedirect(StartUpException); HttpRuntime.UnloadAppDomain(); Response.End(); } } 这有效,但似乎有点像黑客.我也不确定调用UnloadAppDomain的后果,或者如果多个请求到达会发生什么.有没有更好的方法来管理这个? 解决方法
我们在App_Start中遇到引导问题,因为没有设置HttpContext,而且一些bootstapped类需要它;无论如何,这也适用于你的情况:
public class MvcApplication : System.Web.HttpApplication { protected void Application_BeginRequest() { var context = this.Context; FirstTimeInitializer.Init(context); } private static class FirstTimeInitializer { private static bool s_IsInitialized = false; private static Object s_SyncRoot = new Object(); public static void Init(HttpContext context) { if (s_IsInitialized) { return; } lock (s_SyncRoot) { if (s_IsInitialized) { return; } // bootstrap s_IsInitialized = true; } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |