Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET: Access Session variable in global.asax

I have an ASP.NET application and in the Global.asax ' Application Error Event, I am calling a method to trace/log the error. I want to use the session variable content here. I used the below code

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("[email protected]", "[email protected]", "Error in " + Request.Form.ToString(), strError, 2);   
} 

I am getting an error in the line of code where I am accessing the session variable. Visual Studio is telling that

Session is not available in this context

How can I get rid of this?

like image 737
Shyju Avatar asked Jul 22 '09 10:07

Shyju


3 Answers

It should work if you do it like this:

strError = System.Web.HttpContext.Current.Session["trCustomerEmail"]

Because that is what I do myself.

What exactly do you mean with: Visual Studio is telling that "Session is not available in this context"? Do you get a compiler error or a run-time exception?

You could try to be more defensive and test if there actually is a current HttpContext and a Session:

if (HttpContext.Current != null &&
    HttpContext.Current.Session != null) {
  strError = HttpContext.Current.Session["trCustomerEmail"]
}
like image 143
Remko Jansen Avatar answered Nov 16 '22 15:11

Remko Jansen


I think applicaiton error is specific for the whole application and a session is specific for the user. Maybe you can throw your own Exception where you save the information from the session inside your exception.

like image 23
Magnus Bertilsson Avatar answered Nov 16 '22 17:11

Magnus Bertilsson


You may try this:

HttpContext context = ((HttpApplication)sender).Context;

then you must use is like this:

context.Request.QueryString.ToString()
context.Session["key"] = "fasfaasf";

but if the exception was thrown before the Session object is loaded, it will be null

like image 1
Jan Remunda Avatar answered Nov 16 '22 15:11

Jan Remunda