3

URLが存在する場合にボタンを表示するコードがあります。

try
{
    string dashboardURL = Config.RootUrl + "/Dashboard/Default.aspx";
    WebRequest req = WebRequest.Create(dashboardURL);
    WebResponse response = req.GetResponse();
    btnDashboard.Visible = true;
}
catch (Exception)
{
    btnDashboard.Visible = false;
}

ただし、デバッグ時に、req.getResponse()が発生Application_Errorします。ここでキャッチされた例外を確認しましたが、これはSystem.Net.WebExceptionです。私の理解では、それApplication_Errorは未処理の例外に対して発生します。

次のように例外を強制するようにコードを変更した場合:

try
{
    string dashboardURL = Config.RootUrl + "/Dashboard/Default.aspx";
    WebRequest req = WebRequest.Create(dashboardURL);

    int j = 0;
    int i = 1 / j;

    WebResponse response = req.GetResponse();
    btnDashboard.Visible = true;
}
catch (Exception)
{
    btnDashboard.Visible = false;
}

その後Application_Error、解雇されません。これは良いことです。例外が処理されたとしても、GetResponse()常に発生するエラーの処理に特別な何かがありますか?Application_Error

4

2 に答える 2

2

Application_Errorで、例外を確認します。

var exception = Server.GetLastError();

このコードでApplication_Errorが発生することは不可能です。例外は、このtry/catchブロックの後である必要があります。

また、ソリューションをクリーンアップして再構築するか、Designerファイルを強制的に再作成してみてください(aspxファイルで何かを変更してください)。

MVC3 / MVC4環境でも、異なるASP.NETバージョンでコードをテストしましたが、Application_Errorが発生することはありません。

于 2012-07-11T02:52:40.623 に答える
1

/Dashboard/Default.aspx同じサーバー/アプリケーションにありますか ?

その場合、その要求を処理すると、エラーが発生する可能性がありますApplication_Error。その理由はGetResponse()、HTTPリクエストを実行しているため、(潜在的に)リモートサーバーでリクエストを処理しているときに発生した例外は、呼び出し元のコードのtry/catchでは処理されないためです。特別な場合、リモートサーバー=ローカルサーバーですが、考え方は変わりません。

于 2012-07-12T22:57:26.970 に答える