8
votes

ASP.NET: Variable de session d'accès à Global.Asax

J'ai une application ASP.NET et dans l'événement d'erreur d'application Global.Asax ', j'appelle une méthode pour tracer / enregistrer l'erreur. Je veux utiliser le contenu de la variable de session ici. J'ai utilisé le code ci-dessous

void Application_Error(object sender, EventArgs e)
{
     //get reference to the source of the exception chain
     Exception ex = Server.GetLastError().GetBaseException();

     //log the details of the exception and page state to the
     //Windows 2000 Event Log
     GUI.MailClass objMail = new GUI.MailClass();
     string strError = "MESSAGE: " + ex.Message + "<br><br><br>" + "SOURCE: " + ex.Source + "<br>FORM: " + Request.Form.ToString() + "<br>QUERYSTRING: " +    Request.QueryString.ToString() + "<br>TARGETSITE: " + ex.TargetSite + "<br>STACKTRACE: " + ex.StackTrace;
     if (System.Web.HttpContext.Current.Session["trCustomerEmail"] != null)
     {
         strError = "Customer Email : " + Session["trCustomerEmail"].ToString() +"<br />"+ strError;
     }

     //Call a method to send the error details as an Email
     objMail.sendMail("test@gmail.com", "myid@gmail.com", "Error in " + Request.Form.ToString(), strError, 2);   
} 


1 commentaires

D'où vient l'erreur d'être lancée? Dans le code ASPX derrière (quel événement?), Ou dans un gestionnaire HTTP, etc.? Cela peut déterminer si l'utilisation de l'objet de session est valide ou non


3 Réponses :


3
votes

Je pense que l'erreur requérante est spécifique à l'ensemble de l'application et une session est spécifique pour l'utilisateur. Peut-être que vous pouvez jeter votre propre exception où vous enregistrez les informations de la session à l'intérieur de votre exception.


1 commentaires

Oui. Les événements ApplicationXxxx sont spécifiques à votre application et non pour une session.



12
votes

Ça devrait fonctionner si vous le faites comme ceci:

if (HttpContext.Current != null &&
    HttpContext.Current.Session != null) {
  strError = HttpContext.Current.Session["trCustomerEmail"]
}


1 commentaires

Pouvez-vous publier le message d'exception que vous obtenez lors de l'accès à la session et au message d'exception que vous essayez de gérer?



1
votes

Vous pouvez essayer ceci: xxx

alors vous devez utiliser est comme ceci: xxx

mais si l'exception a été lancée avant la L'objet de session est chargé, il sera null


0 commentaires