3

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_Errorglobal.asax

4

3 に答える 3

1

解決済み:

問題は、Ajax 呼び出し中に何か問題が発生したという事実でした。非同期エラー処理は「通常の」エラー処理として機能せずApplication_OnError、エラー ページに到達するための独自の「パス」を持っています。というわけで私のエラーページがヒットしましたが、エラーは見当たりませんでした。

それ以外では、グローバル エラー処理 (非 Ajax 呼び出しの場合) は期待どおりに、コードどおりに機能します。

于 2013-01-10T13:56:51.707 に答える
0

私のコードでは、例外をセッションに入れ、エラーページへのリダイレクトを使用しました。

于 2013-01-10T13:29:37.610 に答える
0

Items例外をプロパティに設定しているのでServer.ClearError()、ページを転送する前に使用できると思います。

于 2013-01-10T12:37:19.020 に答える