10

有人告诉我 Respond.Redirect 是一个昂贵的过程,因为它会引发 ThreadAbortException。因此,我们应该改用 CompleteRequest 函数。所以我试了一下,但我注意到它下面的代码仍在运行,这是我不想要的。我想立即强制浏览器跳转到另一个网站。

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() 只是绕过Response.End()方法,这是生成您提到的 ThreadAbortException 的原因,但至关重要的是 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 回答