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

Las*_*ker 10 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
Run Code Online (Sandbox Code Playgroud)

至于上面的代码,仍然抛出ApplicationException.但为什么?:(

gre*_*g84 15

一种方法不直接替换另一种方法.该CompleteRequest()方法 不会当它被称为终结执行.所以,如果你真的想做什么,那么Response.Redirect(字符串)将是你要走的路.

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

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

  • 在这种情况下,你要么必须在if块中使用`Response.Redirect(string)`,要么在调用`CompleteRequest()`之后从Sub返回.我想在VB.NET中你可以把`Return`放在`End If`之前. (2认同)