当我需要从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来查看文件,而不仅仅是删除文件。
答案 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。