В интерес на това винаги да показвам „приятелска“ страница за грешки на потребителите, когато посещават сайт, имам едно общо в страницата 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 или какво ще се случи, ако пристигнат множество заявки. Има ли по-добър начин да управлявате това?
GlobalFilters.Filters
включва лиHandleError
? Ако е така, това е улавяне на всички грешки. - person alexn   schedule 29.04.2013