Question

J'utilise Elmah avec ASP.NET et je me demande comment j'ajouterais des données personnalisées, comme une variable de session, à un e-mail d'exception non géré.

J'ai essayé plusieurs gestionnaires dans le fichier global.asax mais je n'arrive pas à trouver le bon.

Était-ce utile?

La solution

Pour cela, je pense que vous auriez besoin de modifier l'Elmah la source et recompiler. Cela ne devrait pas être trop difficile à réaliser. Si vous avez un coup d'œil dans le constructeur du Elmah.Error classe, le HttpContext est passé, à partir de laquelle vous devriez pouvoir obtenir les informations dont vous avez besoin, par exemple la session, les variables de formulaire, etc. Vous pouvez ajouter des champs personnalisés au Elmah.Error classe pour ces données

Je pense que le Elmah.ErrorMailHtmlFormatter La classe est l'endroit où l'e-mail est construit à l'aide d'un HtmlTextWriter, et ici vous pouvez insérer du code dans le RenderSummary() Méthode pour inclure les champs personnalisés auxquels vous avez ajouté Elmah.Error.

Je sais que cela peut être difficile de commencer à travailler avec Source, mais personnellement, je pense que c'est le moyen le plus propre car il n'y a actuellement aucune installation pour les modèles de rapport / e-mail, et il est préférable de boucler quelque chose pour changer la sortie après sa génération.

Autres conseils

La réponse d'Andrew a beaucoup aidé, merci. J'ai fini par faire ce qui suit:

  1. Ajout d'un événement Onbuilding au module HTTP Errormail. L'événement Args pour cet événement a une propriété NameValueCollection.
  2. J'ai géré l'événement de Building dans Global.asax.
  3. Étant donné que les httpmodules n'ont pas toujours accès à SessionState, esp. Si l'exception se produit avant le chargement de la session, j'ai copié les données que je voulais être signalées dans le cache HTTPAPPLICATION (indexé par SessionID).
  4. Lorsqu'une exception se produit, j'attrape les données que je veux du cache d'application via le sessionID stocké dans la demande (en particulier dans le cookie). Je génère un nameValueCollection à partir de ces données et je le renvoie au HttpModule via les args de laBuilding.
  5. Les données sont ensuite rendues par e-mail de manière similaire à la façon dont la section Variables du serveur est rendue.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top