67

ASP.Net 単一ファイル Web サービス (実装.ashxを含むファイル) があり、 500 内部サーバー エラーステータス コードを含むIHttpHandler応答としてエラーを返す必要があります。これは、PHP では比較的簡単に行うことができます。

header("HTTP/1.1 500 Internal Server Error");
header("Content-Type: text/plain");
echo "Unable to connect to database on $dbHost";

ASP.Net (C#) に相当するものは次のとおりです。

Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
Context.Response.ContentType = "text/plain";
Context.Response.Write("Unable to connect to database on " + dbHost);

もちろん、これは期待どおりには機能しません。代わりに、IIS は 500 ステータス コードを傍受し、私がResponseオブジェクトに書き込んだものを破棄し、アプリの構成方法に応じて、デバッグ情報またはカスタム エラー ページのいずれかを送信します。

私の質問 - この IIS の動作を抑制し、IHttpHandler実装からエラー情報を直接送信するにはどうすればよいですか?

このアプリは PHP からの移植です。クライアント側はすでに書かれているので、私は基本的にこの仕様にこだわっています。残念ながら、200 ステータス コードでエラーを送信することは、型にはまらないものです。

理想的には、動作をプログラムで制御する必要があります。これは、「このファイルを編集する」および「この IIS 設定を変更する」補足説明なしで配布したい SDK の一部であるためです。

ありがとう!

編集:ソート。Context.Response.TrySkipIisCustomErrors = trueチケットでした。わお。

4

3 に答える 3

116

Context.Response.TrySkipIisCustomErrors = true

于 2010-12-22T01:10:47.967 に答える
12

過去に以下を使用したことがあり、Page_Load メソッドで以下に示すコードを使用して、カスタム メッセージで 503 エラーをスローすることができました。このページをロード バランサーの背後にある ping ページとして使用して、ロード バランサーがサーバーが稼働しているかどうかを確認します。

お役に立てれば。

        protected void Page_Load(object sender, System.EventArgs e)
    {
        if (Common.CheckDatabaseConnection())
        {
            this.LiteralMachineName.Text = Environment.MachineName; 
        }
        else
        {
            Response.ClearHeaders();
            Response.ClearContent(); 
            Response.Status = "503 ServiceUnavailable";
            Response.StatusCode = 503;
            Response.StatusDescription= "An error has occurred";
            Response.Flush();
            throw new HttpException(503,string.Format("An internal error occurred in the Application on {0}",Environment.MachineName));  
        }
    }
于 2010-12-21T03:28:07.607 に答える
0

customErrors ページを設定したい場合があります (web.config で設定可能)。セッション内のリクエスト間で (または別のメカニズムを介して) コンテンツを保存してから、カスタム出力を表示するカスタム エラー ページを表示するように asp.net を構成することができます。

ただし、注意が必要です。アプリケーションの根本的な問題 (StackOverflowException など) が原因で 500 が発生している場合、asp.net に依存するページ (MyCustomErrors.aspx など) を表示しようとすると、.ループ。

詳細については、このページをご覧ください。

于 2010-12-21T03:17:08.803 に答える