12 votes

Le filtre d'exception personnalisé n'est pas pris en compte dans asp.net MVC

J'ai un filtre d'exception personnalisé que j'utilise pour attraper une exception personnalisée que j'ai écrite, mais pour une raison quelconque, lorsque je lance mon exception, elle n'arrive jamais au filtre. Au lieu de cela, j'obtiens une erreur indiquant que mon exception n'a pas été gérée par le code utilisateur. Est-ce que quelqu'un peut me donner des conseils ou de l'aide sur la façon dont je devrais mettre cela en place ? Le code en question se trouve ci-dessous :

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

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

c'est le contrôleur avec l'attribut customexception

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

c'est la classe (pour mon test) qui lance l'exception (j'ai aussi essayé de la lancer directement sur le contrôleur).

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

c'est le filtre d'exception personnalisé... il n'est jamais atteint lorsque le code est exécuté et que l'exception est levée. Au lieu de cela, j'obtiens l'erreur mentionnée ci-dessus. Tout ce que j'ai lu indique que c'est la bonne façon de procéder, mais lorsque je place des points d'arrêt dans mon filtre personnalisé, il n'est jamais atteint....

Qu'est-ce qui m'échappe ?

TIA

7voto

Richard Points 14490

Une fois l'erreur traitée, vous devez informer le contexte du filtre que l'erreur a été traitée. Voici comment procéder :

filterContext.ExceptionHandled = true;

Cela devrait figurer dans votre section "// faire des choses".

J'ai copié votre code et le filtre est appelé correctement. La seule différence que j'ai faite est que j'ai ajouté le code exceptionHandled et que j'ai ajouté mon point d'arrêt à cette ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X