3

が呼び出されたときにスローされないようにApplicationInstance.CompleteRequest()するための使用について説明したSOの質問に出くわしました。ThreadAbortExceptionResponse.End()

以前は、上記の例外エラーを回避するために、次のオーバーロードを使用しましResponse.End(false)た。

私は2つの方法の違いを理解しようとしています。なぜApplicationInstance.CompleteRequest()代わりに使用することを選択するのResponse.End(false)ですか?

編集:

ApplicationInstance.CompleteRequest()私はそれが物事を行うためのより正しい方法であることを理解していますが、Response.End(true)欠落している呼び出しの1つの機能は、後続のコードの残りの部分を処理していません。場合によっては、処理を続行したくないが、その場で実行を終了したいことがあります。

ここで私自身の質問に答えるかもしれませんが、正しい方法は、応答を終了するとき(スレッドを中止しないとき)に処理するコード行がなくなるようにコードを記述することです。

例:

[DO SOME WORK]
if ([SOME CONDITION])
{
     ApplicationInstance.CompleteRequest();
}
else
{
    //continue processing request
}

これはうまくいくかもしれませんが、メソッドの制限に対処するためにここでコーディングしているようです。そして、いくつかの厄介なコードにつながる可能性があります。

ここで何かが足りませんか?

4

1 に答える 1

3

http://weblogs.asp.net/hajan/archive/2010/09/26/why-not-to-use-httpresponse-close-and-httpresponse-end.aspx

記事から:「HttpResponse.EndメソッドとHttpResponse.Closeメソッドを使用する代わりに、HttpApplication.CompleteRequestメソッドを使用するのが最善です。これにより、サーバー、クライアント、またはその間にバッファリングされる応答データが取得されなくなります。落とした。」

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello Hajan");
    Response.End();            
    Response.Write("<br />Goodbye Hajan");
}
Output: Hello Hajan

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello Hajan");
    this.Context.ApplicationInstance.CompleteRequest();
    Response.Write("<br />Goodbye Hajan");
}

Output: Hello Hajan 
Goodbye Hajan

http://blogs.msdn.com/b/aspnetue/archive/2010/05/25/response-end-response-close-and-how-customer-feedback-helps-us-improve-msdn-documentation.aspx

記事から:「HttpApplication.CompleteRequestはリクエストを終了するためのより良い方法です。」

于 2013-01-29T20:53:43.680 に答える