10

Respond.Redirectは、ThreadAbortExceptionを発生させるため、コストのかかるプロセスであると言われました。したがって、代わりに、CompleteRequest関数を使用する必要があります。それで試してみましたが、その下のコードがまだ実行されていることに気づきました。ブラウザをすぐに別のWebサイトにジャンプさせたい。

Public Shared Sub TestCompleteRequest()
            If 1 = 1 Then
                System.Web.HttpContext.Current.Response.Redirect("Http://Google.com", False)
                System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest()
            End If

            Throw New ApplicationException("Hello, why are you here?")
End Sub

上記のコードに関しては、ApplicationExceptionが引き続きスローされます。しかし、なぜ?:(

4

2 に答える 2

15

一方の方法がもう一方の方法を直接置き換えることはありません。CompleteRequest()メソッド は、呼び出されても実行を終了しません。したがって、それが本当にやりたいことである場合は、Response.Redirect(string)が最適です。

CompleteRequest()は、前述のThreadAbortExceptionを生成するResponse.End()メソッドをバイパスするだけですが、重要なことに、CompleteRequest()は応答バッファーをフラッシュします。これは、HTTP 302リダイレクト応答がCompleteRequest()を呼び出した行でブラウザーに送信されることを意味します。これにより、ユーザーに送信された後、応答に影響を与えない操作を実行できます。

あなたのための解決策は本当にあなたが達成する必要があるものに依存します、あなたがResponse.Redirectを使用しているものの例と同じメソッドにある他のコードを提供できますか?

于 2012-06-29T08:25:38.543 に答える
2

ASP.NETフレームワークでメソッドを呼び出すと、要求が処理されますが、実際には、VB.NETを作成して実行していることになります。この言語には、'を示すものは何もありません。メソッドが戻り、Exit Sub'を実行します。

とにかく、ASP.NETに要求を完了するように指示した後、メソッドの一部を実行したくないと誰が言いますか?

于 2012-06-29T08:35:40.183 に答える