Response.Redirect导致“对象移动到此处”

时间:2010-02-02 14:13:40

标签: c# asp.net exception abort

我正在开发一个C#ASP.NET页面,通常最终会重定向到“file:”URL。在大多数情况下,这似乎在大多数情况下工作正常,但偶尔(并且,在我的测试系统上,显然总是)而不是重定向到文件我得到一个文本“对象移到这里”的页面,其中“here”是我尝试重定向到的文件的链接,但在冒号后面有两个斜杠而不是两个(即“file:////testserver/docs/testdoc.doc”)

这通常伴随着“System.Threading.ThreadAbortException:Thread is aborted”消息。

我在其他地方寻找解决方案并找到一些有关Response.Redirect的有趣内容导致ThreadAbort异常,但这似乎不是根本问题 - 在我看来,实际问题是“对象被移动到这里“消息,导致异常被抛出。

任何人都有任何建议我为什么会这样......?

编辑:忘记提及我正在使用IE Tab运行Firefox(3.5.7),所以当我想我最好在IE中试用它时,瞧瞧 - 它适用于IE(7)。

7 个答案:

答案 0 :(得分:28)

仅供将来参考,可能发生的另一个原因是,如果您执行类似Response.Redirect(null)或类似操作。我有一种情况,我的变量持有URL是空的,这就是我得到的。

答案 1 :(得分:16)

这可能是由于Response.Redirect()方法放在try-catch块中造成的。我遇到的解决方案是通过将重定向标头刷新到客户端来结束响应虚拟。看一看:

HttpResponse Response = HttpContext.Current.Response;
Response.StatusCode = 301; 
Response.StatusDescription = "Moved Permanently";
Response.RedirectLocation = "YourRedirectionUrlHere.aspx";
Response.Flush();

答案 2 :(得分:6)

我刚刚遇到过这种情况。事实证明我们有一些有效的代码:

if (condition)
{
  Response.Redirect(page1);
}
Response.Redirect(page2);

显然,写这篇文章的人(很久以前很幸运)没有意识到,默认情况下,Response.Redirect不会结束线程。

我不知道这样做的后果是什么,但是这种情况的小小的痕迹看起来显示出一个腐败的重定向。这当然可能是共同发生的,但这是我们唯一看过这个问题的地方。

答案 3 :(得分:3)

这可能发生的另一个原因是您从https页面重定向到http页面。 将重定向网址更改为https://为我解决了问题。

答案 4 :(得分:1)

在MVC中,您可能会在 RedirectToRoute()之后看到此内容。

如果您使用 Fiddler 之类的工具,您应该会看到服务器响应出现问题。我注意到 500错误

就我而言,这是由于某个对象被添加到 会话 NOT Serializable

答案 5 :(得分:0)

将锚元素与runat=server

一起使用
<a runat="server" ID="anchor1">anything can be here</a>

在代码背后:

if (!ispostback)
  anchor1.href="whateveryoulink";

试一试。

它的工作效果优于之前的Status Code=301方法。

答案 6 :(得分:0)

我通过将全局字符串变量设置为static来解决此问题,因为我在重定向时将URL重置为空。