有人告诉我 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。但为什么? :(
一种方法不会直接取代另一种方法。这CompleteRequest() 方法 http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx does not调用时结束执行。因此,如果这确实是您想要做的,那么 Response.Redirect(string) 将是正确的选择。
CompleteRequest() 简单地绕过了响应.End() https://stackoverflow.com/questions/1087777/is-response-end-considered-harmful方法,这就是生成您提到的 ThreadAbortException 的原因,但至关重要的是 CompleteRequest() 会刷新响应缓冲区。这意味着 HTTP 302 重定向响应被发送到浏览器在线上在其中调用 CompleteRequest(),这使您有机会执行不影响响应发送给用户后的操作。
您的解决方案实际上取决于您需要实现的目标,您能否提供一个示例,说明您使用 Response.Redirect 的目的以及同一方法中还有哪些其他代码?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)