2

いくつかの ASPX コード ビハインド ファイルで条件をテストする必要があり、場合によっては、対応する ASPX ページが読み込まれないように、通常のページ読み込みプロセスを完全にバイパスしたいと考えています。代わりに、コード ビハインド メソッドから作成されたカスタム応答をブラウザーに送信したいと考えています。

ページのライフサイクルでオーバーライドするメソッドと、通常の ASPX ページのコンテンツが抑制されている間にカスタム Response.Write が確実にブラウザーに送信されるようにするための最良の方法を、どこから始めればよいか知っている人はいますか?

ありがとう。

4

3 に答える 3

7

おそらく最も簡単な方法 - を使用しますPage_Load()

protected void Page_Load(object sender, EventArgs e)
{
    bool customResponse = true;
    if (customResponse)
    {
        Response.Write("I am sending a custom response");
        Response.End(); //this is what keeps it from continuing on...
    }
}
于 2009-04-08T21:32:21.580 に答える
6

Response.End() を使用してそれを行う「簡単な」方法は、スレッドを終了させる例外をスローして、パフォーマンスが低下します。
http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx
http://weblogs.asp.net/hajan/archive /2010/09/26/why-not-to-use-httpresponse-close-and-httpresponse-end.aspx

同じ質問があり、この方法で解決しました。これは 2 段階のプロセスです。最初に HttpApplication.CompleteRequest() を呼び出して、処理を終了します。次に Render() をオーバーライドして、基本メソッドが呼び出されないようにします。サンプルコードは次のようになります。

bool customResponse = true;

protected void Page_Load(オブジェクト送信者, EventArgs e)
{
    if (カスタムレスポンス)
    {
        Response.Write("カスタム レスポンスを送信しています");
        this.Context.ApplicationInstance.CompleteRequest();
        戻る; // 通常の処理をバイパスします。
    }
    // 通常の処理...
}

protected override void Render(HtmlTextWriter ライター)
{
    if (!customResponse)
        base.Render(ライター); // その後、通常どおりページを書き込みます。
}
于 2011-05-04T02:43:05.467 に答える
0

それは本当にあなたが応答しているものに依存します.それは投稿されたフォームフィールドですか、認証情報などですか? Page_Load を使用して示されているメソッドは機能しますが、ページ ライフサイクルのその時点より前のすべてのメソッドも実行されます。

于 2009-04-08T21:41:40.653 に答える