我被告知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。但为什么? :(
答案 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完成请求之后再执行更多的方法呢?