Asp.net ApplicationInstance.CompleteRequest不';t停止下面代码的执行?

Asp.net ApplicationInstance.CompleteRequest不';t停止下面代码的执行?,asp.net,Asp.net,我被告知Respond.Redirect是一个昂贵的过程,因为它会引发ThreadAbortException。因此,我们应该改用CompleteRequest函数。所以我尝试了一下,但我注意到下面的代码仍然在运行,这是我不想要的。我想立即强制浏览器跳转到另一个网站 Public Shared Sub TestCompleteRequest() If 1 = 1 Then System.Web.HttpContext.Current.Res

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

一种方法不会直接替换另一种方法。调用时,不会结束执行。因此,如果这确实是您想要做的,那么Response.Redirect(string)就是一种方法

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


您的解决方案实际上取决于您需要实现什么,您能否提供一个示例,说明您正在使用Response.Redirect for以及同一方法中还有哪些其他代码?

在ASP.NET框架中调用一个方法可以处理请求,但事实上,您仍然在编写和运行VB.NET-这里面没有任何内容e语言(我认为也不应该有)指示“当这个方法返回时,执行一个
退出子


在告诉ASP.NET完成请求后,谁会说你不想再执行一些方法呢?

嗨,格雷格,谢谢你的回答。下面是代码应该做的。如果用户进入该页面但他没有登录,我想将他重定向到另一个登录页面。因此,上面代码中的“如果”语句应该如果用户未登录,则在此处重定向并忽略其下的所有代码。在这种情况下,您必须在if块中使用
Response.redirect(string)
,或者在调用
CompleteRequest()后从子系统返回
。我认为在VB.NET中,如果,您可以在
结束之前放入
Return
。是的,我想我会使用CompleteRequest选项,并尝试在它之后不运行任何其他代码。谢谢!:)
这意味着HTTP 302重定向响应将发送到浏览器中调用CompleteRequest()的行
-这似乎不正确-页面生命周期结束,它只会停止HTTP管道上的进一步事件!