Событие Application_Error в global.asax не запускается

#c# #asp.net #asp.net-mvc #global-filter

#c# #asp.net #asp.net-mvc #глобальный фильтр

Вопрос:

У меня возникла проблема, из-за которой Application_Error событие, похоже, не срабатывает, когда я явно создаю исключение на уровне страницы.

Мой файл Global.asax.cs выглядит следующим образом:

 public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            CustomExceptionClass.BootstrapEnterpriseLibrary();  
    }

    // Event handler that passes all exceptions not in a catch statement 
    // to the handler

    protected void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        CustomExceptionClass.HandleException(ex);
        Server.ClearError();
    }
}

public class ExceptionPublisherExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext exceptionContext)
    {
        var exception = exceptionContext.Exception;
        CustomExceptionClass.HandleException(exception);
    }
}

public class ErrorHandler : IErrorHandler
{
    public void ProvideFault(Exception error, MessageVersion version, 
        ref Message fault)
    {
    }

    public bool HandleError(Exception error)
    {
        CustomExceptionClass.HandleException(error);
        return true;
    }
}
 

В моем файле web.config есть <customErrors mode="Off"> .

Мой filterconfig выглядит следующим образом:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new ExceptionPublisherExceptionFilter());
    //filters.Add(new HandleErrorAttribute());
}
 

Я попробовал следующие исправления:

  • Изменить customErrors на вкл или выкл
  • Внедрите новый фильтр и добавьте его в filterconfig

Всякий раз, когда я создаю исключение в VS, я пытаюсь вмешаться в него, но оно просто продолжает работать. Кто-нибудь знает, почему Application_Error не запускается?

Редактировать: похоже, что область видимости влияет на то, вызывается ли Application_Error вызов. Итак, вопрос действительно в том, почему Application_Error не вызывается на уровне страницы.

Комментарии:

1. Это не совсем то, что я искал, но это поставило более важный вопрос об эффективной реализации глобальной обработки исключений в asp.net применение. Я использовал Application_Error для обработки всех исключений уровня приложения и точно следовал инструкциям, приведенным [здесь][1] [1]: davidjs.com/2014/04/handle-exceptions-in-asp-net-iis Это позволило мне реализовать обработку и фильтрацию исключений http. Это эффективно решило мою проблему.