Response.redirect引发“线程被中止”

时间:2011-02-02 13:08:34

标签: vb.net iis

当我需要从DB中删除对象时,我调用了一个VB.NET代码。在Page_load上,我检查它是否没有回发(以防止手动刷新),并且在删除对象后,我使用Response.redirect重定向到调用者页面。此时我的代码提出了

  

例外:例外情况   File_delete.aspx.vb行号:34   错误消息:正在进行线程   中止。

并且,在事件查看器上,我可以看到aspnet_wp.exe崩溃:

  

aspnet_wp.exe(PID:1532)已停止   出乎意料。

     

有关详细信息,请参阅“帮助和”   支持中心在   http://go.microsoft.com/fwlink/events.asp

目前尚不清楚为什么会发生这种情况,因为我也使用response.redirect来查看文件,而不仅仅是删除文件。

5 个答案:

答案 0 :(得分:104)

默认情况下,Response.Redirect()会中止当前线程。当然,这会引发ThreadAbortException。可以通过将false传递给Response.Redirect()来阻止它,这不会中止当前线程。

但请注意这意味着什么。如果线程未中止,则Response.Redirect()后面的代码将继续执行。相应地控制您的逻辑流程。 (这通常在重定向后使用return语句和其他流控制指令完成。)

答案 1 :(得分:15)

如果没有给“endResponse”输入参数HttpRequest.Redirect(string,bool)提供“false”布尔值,则Response.Redirect将始终抛出ThreadAbortException,根据MSDN文档:

只需将“false”赋予“endResponse”参数。

答案 2 :(得分:4)

此处列出的解决此问题的选项列表对我有用(我使用了#2): https://gist.github.com/cemerson/9dea993044a4e7fdca0e

答案 3 :(得分:0)

Response.Redirect抛出异常设计。没关系。

答案 4 :(得分:0)

在进行异步调用时可能会发生这种情况。 使用Response.Redirect(string url,false),其中string url是重定向URL。