8

ASP.NETアプリケーションがあり、Global.asaxのアプリケーションエラーイベントで、エラーをトレース/ログに記録するメソッドを呼び出しています。ここでセッション変数のコンテンツを使用したいと思います。以下のコードを使用しました

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

セッション変数にアクセスしているコード行でエラーが発生します。VisualStudioはそれを伝えています

このコンテキストではセッションは利用できません

どうすればこれを取り除くことができますか?

4

3 に答える 3

12

あなたがこのようにそれをするならば、それは働くはずです:

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

それが私自身がしていることだからです。

正確にはどういう意味ですか:Visual Studioは「このコンテキストではセッションは利用できません」と言っていますか?コンパイラエラーまたは実行時例外が発生しますか?

より防御的になり、現在のHttpContextとセッションが実際に存在するかどうかをテストすることができます。

if (HttpContext.Current != null &&
    HttpContext.Current.Session != null) {
  strError = HttpContext.Current.Session["trCustomerEmail"]
}
于 2009-07-22T11:28:33.440 に答える
3

アプリケーションエラーはアプリケーション全体に固有であり、セッションはユーザーに固有であると思います。おそらく、例外内のセッションからの情報を保存する独自の例外をスローできます。

于 2009-07-22T11:10:13.120 に答える
1

これを試すことができます:

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

次に、次のように使用する必要があります。

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

ただし、Session オブジェクトがロードされる前に例外がスローされた場合は、null になります。

于 2009-07-22T12:02:40.580 に答える