2010-07-20 8 views
0

ineed pour écrire les classes d'aide de gestionnaire d'erreurs pour mon asp.net projet mvc ..erreur asp.net mvc Handling classes d'aide

quelqu'un peut me donner le code à écrire et où écrire ces classes d'aide dans mon appliction? Je dois utiliser cette erreur pour me connecter au niveau du contrôleur. Je ne veux pas utiliser try and catch block pour chaque Actionresult de mon contrôle. J'ai besoin d'utiliser le niveau du contrôleur?

cananybody m'aider?

merci

+0

Qu'avez-vous essayé jusqu'à présent? Avez-vous rencontré des problèmes particuliers que vous pourriez poser? –

Répondre

2

Je peux vous suggérer d'utiliser elmah. C'est génial pour la journalisation des erreurs, vous pouvez lire à ce sujet à partir d'ici: http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

Ce que j'ai fait, et je suis heureux avec elle est la suivante. Je l'ai fait un attribut d'erreur de poignée personnalisée, qui a le code suivant:

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
{ 

    public override void OnException(ExceptionContext context) 
    { 
     base.OnException(context); 

     var e = context.Exception; 
     if (!context.ExceptionHandled // if unhandled, will be logged anyhow 
      || ExceptionHelper.RaiseErrorSignal(e)  // prefer signaling, if possible 
      || IsFiltered(context))  // filtered? 
      return; 

     ExceptionHelper.LogException(e); 
    } 


    private static bool IsFiltered(ExceptionContext context) 
    { 
     var config = context.HttpContext.GetSection("elmah/errorFilter") 
        as ErrorFilterConfiguration; 

     if (config == null) 
      return false; 

     var testContext = new ErrorFilterModule.AssertionHelperContext(
            context.Exception, HttpContext.Current); 

     return config.Assertion.Test(testContext); 
    } 
} 

Et j'ai une classe ExceptionHelper avec ce code:

public static class ExceptionHelper 
{ 
    public static bool RaiseErrorSignal(Exception e) 
    { 
     var context = HttpContext.Current; 
     if (context == null) 
      return false; 
     var signal = ErrorSignal.FromContext(context); 
     if (signal == null) 
      return false; 
     signal.Raise(e, context); 
     return true; 
    } 

    public static void LogException(Exception e) 
    { 
     var context = HttpContext.Current; 
     ErrorLog.GetDefault(context).Log(new Error(e, context)); 
    } 

J'ai annotée ma classe de contrôleur de base avec MyNamspace.HandleError et maintenant toutes les exceptions sont traitées et enregistrées, je reçois même un mail quand quelque chose ne va pas ....

+1

mate, +1 pour la patience avec un 'écrire le code pour moi' – BritishDeveloper

1

écriture d'erreur pour vous? hmmmm. Heureusement que quelqu'un a déjà: Vous avez besoin log4net