Подтвердить что ты не робот

Пользовательский фильтр исключений не попадает в asp.net MVC

У меня есть специальный фильтр исключительных ситуаций, который я использую, чтобы поймать настраиваемое исключение, которое я написал, но по какой-то причине, когда я бросаю свое исключение, он никогда не попадает в фильтр. Вместо этого я просто получаю сообщение о том, что мое исключение не было обработано кодом пользователя. Может ли кто-нибудь предложить некоторые советы/помощь в отношении того, как мне это настроить? Соответствующий код приведен ниже:

// controller    
[CustomExceptionFilter]
    public class SomeController : Controller
    {    
        public SomeController()
        {

        }
        public ActionResult Index()
        {
            SomeClass.SomeStaticMethod();
            return View();
        }
    }

что контроллер с атрибутом customexception

// some class (where exception is being thrown)
public class SomeClass
{
    public static void SomeStaticMethod()
    {
        throw new MyCustomException("Test");
    }
}

что класс (для моего теста), который генерирует исключение (я также пытался бросить его непосредственно на контроллер).

// Custom exception filter (want this to catch all unhandled exceptions)
public class CustomExceptionFilter : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext.Exception.GetType() == typeof(MyCustomException))
        {
            // do stuff
        }
    }
}

что настраиваемый фильтр исключений... он никогда не достигается при выполнении кода и исключении. Вместо этого я получаю ошибку, упомянутую выше. Все, что я прочитал, указывает, что это правильный способ установить это, но когда я помещал точки останова в свой настраиваемый фильтр, он никогда не ударяется....

Что мне здесь не хватает?

ТИА

4b9b3361

Ответ 1

После того, как вы обработали свою ошибку, вы должны сообщить контексту фильтра, что он был обработан. Вот так:

filterContext.ExceptionHandled = true;

Это должно быть в разделе "//do stuff".

Я скопировал ваш код, и фильтр получил название fine. Единственное отличие, которое я сделал, это добавить код exceptionHandled и добавить точку останова в этой строке.