条件に基づいて、Asp.net ページから 400 (実際には 200(Status OK) 以外のコード) エラー コードを送り返したいと考えています。
if(Failed)
{
Context.Response.TrySkipIisCustomErrors = true;
Context.Response.ClearContent();
Context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
HttpContext.Current.ApplicationInstance.CompleteRequest();
Context.Response.End();
}
このコードは PageLoad メソッドにあります。しかし、残念ながら、上記の If ステートメントがある場合、これは機能しません (そして、If ステートメント内のコードが実行されます。これはデバッグで見られます)。
しかし、コード全体を配置すると
Context.Response.TrySkipIisCustomErrors = true;
Context.Response.ClearContent();
Context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
HttpContext.Current.ApplicationInstance.CompleteRequest();
Context.Response.End();
これらの行に先行する他のコードなしで PageLoad に直接、応答コードが返されます。これは奇妙です。
HTTPModule も使用してみましたが、同じです。
応答コードを設定する前に他のコード行が実行されたときに応答が設定されない理由を理解していません。
しかし、応答の内容はクリアされます。
気にしない
どうでも。
この問題には 2 つの原因がありました。
1 つは、localhost が HTTPREquest ステータス コードに必要なエラーをスローせず、サーバー上の IIS サイトに展開したときに、すべてが正常に見えたことです。
2 つ目は、HttpWebRequest を使用してプログラムでチェックするテストを自動化していたことです。そして、リクエストヘッダーに基づいて決定を行っているため、リクエストオブジェクトにリクエストヘッダー情報を送信するのを忘れていました。
全体として、コード行は素晴らしいです。