Пользовательский фильтр исключений не срабатывает в asp.net MVC - PullRequest
12 голосов
/ 15 января 2010

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

// 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
        }
    }
}

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

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

ТИА

1 Ответ

7 голосов
/ 16 января 2010

Как только вы обработаете свою ошибку, вам нужно сообщить контексту фильтра, что она обработана. Как это:

filterContext.ExceptionHandled = true;

Это должно быть в вашем разделе "// делать вещи".

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...