Winforms の中断が長引いた後、私は ASP.NET の世界に戻ってきました。
グローバル ASP.NET エラー ハンドラーと開発者にエラーを表示するページを (DEV 環境で) 実装しようとしています。
ではglobal.asax.cs
、次のような未処理のエラーをキャッチします。
private void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex != null)
{
HttpContext.Current.Items["exception"] = ex;
// do a bit more stuff here, like logging the error and so on
Server.Transfer("~/Error.aspx");
}
}
(PS:補足として:使用するServer.GetLastError()
かHttpContext.Current.Error
、推奨される方法を使用しますか?使用する方が良い方法とその理由について、実際には難しい事実を見つけることができません)
そして、「開発」エラーページで、画面にエラーを表示しようとしています-しかし、そのエラーを取得しようとすると、とらえどころのないようです-私は戻ってくるだけnull
です...
public partial class Error : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// both "exc" as well as "exc2" always end up being "null" ...
Exception exc = HttpContext.Current.Error;
Exception exc2 = HttpContext.Current.Items["exception"] as Exception;
// display error .....
}
なぜですか?私は、Server.Transfer()
そのエラーを使用してもまだそこにあると想定していました (私は呼び出しServer.ClearError()
ていません)。それが機能しない場合は、少なくとも例外を貼り付けても機能すると予想されHttpContext.Items
ます。これは、同じ内部で実行されているコードであるためです。 HTTP コンテキスト/リクエスト - いいえ?
ここで何が欠けていますか?また、例外情報をキャッチしてから別のエラーページに「転送」するにはどうすればよいですか?global.asax.cs
すべてのヒントとポインタをありがとう!
更新: OK - これは常に発生するとは限らないようです - 場合によっては、このメカニズムが正常に機能することがあります (私が期待していたとおり)。
BUT:ImageButton
編集や削除などのアクションを含むページにグリッドがあります。これらのコマンドを処理するイベント ハンドラーを定義しMyGridViewHandleRowCommand
ましたが、うまくいかないようです。これらの画像ボタンのいずれかをクリックするたびに、エラー ページがアクティブになります。はい、コードはグローバルハンドラを完全にバイパスしているようです。そしてこの場合、エラーページでエラーに関する情報を取得できません-すべてがnullです.....Application_Error
global.asax