2010-01-15 6 views
12

J'ai un filtre d'exception personnalisée que j'utilise pour attraper une exception personnalisée que j'ai écrit, mais pour une raison quelconque quand je jette mon exception, il ne jamais arriver au filtre . Au lieu de cela, je reçois juste une erreur que mon exception n'a pas été traitée par le code utilisateur. Quelqu'un peut-il s'il vous plaît fournir des conseils/assistance quant à la façon dont je devrais avoir cette mise en place? Code pertinent est ci-dessous:filtre d'exception personnalisée ne pas être frappé dans asp.net MVC

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

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

qui 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"); 
    } 
} 

qui est la classe (pour mon test) qui lève l'exception (je l'ai aussi essayé de le jeter directement sur le contrôleur). C'est le filtre d'exception personnalisé ... il n'est jamais atteint lorsque le code est exécuté et l'exception est levée. Au lieu de cela, je reçois l'erreur mentionnée ci-dessus. Tout ce que j'ai lu indique que c'est la bonne façon de le mettre en place, mais quand je mets dans mon filtre des points d'arrêt sur mesure, il n'a jamais été frappé ....

Qu'est-ce que je manque ici?

TIA

Répondre

7

Une fois que vous avez tenu votre erreur, vous devez laisser le contexte du filtre savoir qu'il a été manipulé. Comme ceci:

filterContext.ExceptionHandled = true; 

Cela devrait être dans votre section '// do stuff'.

J'ai copié votre code, et le filtre devient appelé fin. La seule différence que j'ai faite a été d'ajouter le code exceptionHandled et d'ajouter mon point d'arrêt à cette ligne.

+0

J'espère que vous suivez encore ceci même si c'est 4 jours. Je viens de revenir à cela et ajouté votre ligne de code à l'intérieur de mon bloc if .... il n'est jamais atteint car ma méthode OnException n'est jamais appelée. Y at-il un drapeau quelque part que j'ai besoin de définir (peut-être dans web.config) ou quelque chose pour dire à l'application de gérer les exceptions dans ce filtre? I « m encore obtenir l'erreur sur le « throw new MyCustomException (» Test »), ligne » indiquant que l'exception non gérée par le code utilisateur – Kyle

+1

Je n'ai pas besoin de mettre des drapeaux, ou quoi que ce soit à ajouter web.config.. il fonctionne simplement Lorsque je fais un pas par en mode débogage:.. tout d'abord l'exception est levée et il se brise là alors j'appuyer sur le jeu et passe par mon point d'arrêt dans OnException Avez-vous essayé de marcher à travers en mode débogage –

+0

Je suppose que tout.? est dans le même espace et vous avez seulement un CustomExceptionFilter et CustomException. –

Questions connexes