ApplicationInstance.CompleteRequest不会停止执行下面的代码吗?

时间:2012-06-29 02:08:59

标签: asp.net

我被告知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。但为什么? :(

2 个答案:

答案 0 :(得分:15)

一种方法不能直接替换另一种方法。 CompleteRequest() method 在调用时不会结束执行。所以,如果你真的想做什么,那么Response.Redirect(字符串)就是你的选择。

CompleteRequest()只是绕过Response.End()方法,这就是生成你提到的ThreadAbortException的方法,但最重要的是CompleteRequest()刷新了响应缓冲区。这意味着HTTP 302重定向响应将发送到您在其中调用CompleteRequest()的行处的,这使您有机会在响应发送到之后执行不影响响应的操作。用户。

您的解决方案实际上取决于您需要实现的目标,您能提供一个使用Response.Redirect的示例以及其他代码在同一方法中的示例吗?

答案 1 :(得分:1)

调用ASP.NET框架中的方法处理请求,但事实是你仍在编写并运行 VB.NET - 这里没有任何内容语言(也不应该,我会说)表示'此方法何时返回,执行Exit Sub'。

谁能说你不想在告诉ASP.NET完成请求之后再执行更多的方法呢?