2013-04-15 6 views
2

У меня есть этотMVC GlobalFilters не стреляющие

public class ExceptionFilter : IExceptionFilter 
{ 
    public void OnException(ExceptionContext context) 
    { 
     Exception exception = context.Exception; 
     if (!(exception is HttpException)) 
     { 
      Trace.TraceError("ExceptionFilter: " + ExceptionUtilities.GetFullExceptionMessage(exception)); 
      Trace.Flush(); 
     } 
    } 
} 

и это в global.asax

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new Filters.ExceptionFilter()); 
    filters.Add(new HandleErrorAttribute()); 
} 

, но когда я вызвать ошибку, создав опасный запрос, как этот

пример .com/dsfgds: dfgd

я получаю исключение:

потенциально опасное значение Request.Path обнаруженную от клиента (:)

и фильтр не срабатывает, и точка останова внутри не получает удар.

ответ

2

Это потому, что вы регистрируете IExceptionFilter с MVC, и как таковой он будет захватывать только необработанные исключения, которые были подняты в действии MVC (и я думаю, может быть, другие фильтры MVC? Не цитируйте меня на этом). Но ошибка о потенциально опасном запросе - ошибка ASP.NET, запрос никогда не попадал в MVC, поэтому фильтр ошибок MVC никогда не вызывается. Аналогичным образом, любые ошибки уровня IIS также не будут устранены этим. Для ошибок, отличных от MVC, вам все равно необходимо отслеживать событие Application_OnError. Или в случае обработчиков исключений, таких как Elmah, пусть он отслеживает событие для вас.