例外を生成するファイルの名前を取得するにはどうすればよいですか。
元。addUser.aspx
try
{
SaveUser();
}
catch (Exception ex)
{
response.wrhite(ex.GETPAGE().toString());
}
return addUser.aspx;
ASP.NETのC#の場合、Global.asaxのApplication_Errorイベント中にRequestオブジェクトを介して取得できます。
protected void Application_Error(object sender, EventArgs e)
{
// some code here
String url = Request.Url.ToString()
// some more code here
}
正確にはファイルではありませんが、はでclass
利用できますex.Source
。
を使用して、現在のリクエストのURLにアクセスできますHttpContext.Current.Request.Url
。
残念ながら、Exception
クラスにはあなたが探しているものに関する情報がありません。Yahiaがここで指摘しているように、例外からクラス名を取得できますが、ご存知のとおり、これはASPXパスを見つけるのに実際には役立ちません。
Grahamが指摘しているように、最善のRequest.Url.ToString()
方法は、例外ハンドラー内からメソッドを使用することです。コードはページに関連するASPX.cs内から実行されているため、オブジェクトはこれに使用できます。Request
これが醜いお尻の答えですが、私はお勧めしません:
例外が実際のページから発生している場合(プロジェクト内の他の場所にあるDLLやその他のクラスではない場合)、StaceTraceにはページファイル名が付けられます。これが私のためにローカルにスローする単純なページとメソッドのトレースです:
at WebApp2.ExceptionPage.BlowUp() in C:\Users\gpeel\Desktop\Documents\Visual Studio 2010\Projects\GPTestBed\WebApp2\Exception.aspx.cs:line 27 at WebApp2.ExceptionPage.Page_Load(Object sender, EventArgs e) in C:\Users\gpeel\Desktop\Documents\Visual Studio 2010\Projects\GPTestBed\WebApp2\Exception.aspx.cs:line 16
フレーズ「.aspx.cs」の最初のインスタンスを探し、最初の「\」文字に到達するまで文字列の左側に移動することで、そのファイル名を引き出すことができます。これにより、上記の「Exception.aspx.cs」が得られます。
ただし、global.asaxであっても、Application_ErrorのExceptionオブジェクトを処理するためにコードを再実行することを強くお勧めします。そのイベントでServer.GetLastError ()。GetBaseException()を呼び出して、スローされた例外を取得し、Request.Urlを呼び出してページを取得します。