36

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

这通常伴随着“System.Threading.ThreadAbortException:线程被中止”消息。

我在其他地方寻找了解决方案,并发现了一些关于 Response.Redirect 导致 ThreadAbort 异常的有趣内容,但这似乎不是根本问题——在我看来,实际问题是“对象移至此处”消息,这会导致抛出异常。

任何人有任何建议为什么我得到那个......?

编辑:忘了提到我正在使用 IE Tab 运行 Firefox(3.5.7),所以当我认为我最好在 IE 中尝试它时,我正要提到它,瞧——它在 IE(7)中工作。

4

8 回答 8

31

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

于 2012-06-19T15:44:38.163 回答
17

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

HttpResponse Response = HttpContext.Current.Response;
Response.StatusCode = 301; 
Response.StatusDescription = "Moved Permanently";
Response.RedirectLocation = "YourRedirectionUrlHere.aspx";
Response.Flush();
于 2012-05-02T12:03:17.057 回答
8

我刚刚遇到一个发生这种情况的案例。原来我们有一些有效的代码:

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

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

我不知道这样做的后果是什么,但这种情况的提琴手痕迹看起来显示了一个损坏的重定向。当然,这可能是一个巧合,但这是我们唯一看到这个问题的地方。

于 2013-03-01T02:02:50.810 回答
3

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

于 2015-06-24T00:51:37.130 回答
3

当我看到这个问题时,这对我有用:

[Route("/something/{param}", "GET")]
public class MyRequestArg{
   public string param{get;set;}
}

public class MyRequestService
{
    public object Get(MyRequestArg request)
    {
    var url = "http://www.zombo.com";
    var myCookieString = "anything is possible!";

    var result = new HttpResult
                 {
                   StatusCode = HttpStatusCode.Redirect,
                   Headers = {
                              {HttpHeaders.Location, url},
                              {HttpHeaders.SetCookie, myCookieString}
                             }   
                 };
    return result;
    }
}
于 2016-04-12T23:11:45.710 回答
1

在 MVC 中,您可能会在RedirectToRoute()之后看到这一点。

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

在我的情况下,这是由于添加到Session中的对象不是可序列化的。

于 2013-08-01T22:23:17.180 回答
0

使用锚元素runat=server

<a runat="server" ID="anchor1">anything can be here</a>

在后面的代码中:

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

试试看。

它比以前的Status Code=301方法工作得更好。

于 2013-03-16T14:47:31.180 回答
0

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

于 2017-08-21T17:38:54.450 回答