2010-02-02 71 views
28

我正在處理通常最終重定向到「file:」URL的C#ASP.NET頁面。這似乎在大多數情況下都能正常工作,但在大多數情況下,但偶爾(並且在我的測試系統上,顯然總是),而不是重定向到一個文件,我得到一個文本爲「Object move to here」的頁面,其中「here」是我試圖重定向到的文件的鏈接,但冒號後面有四個斜槓而不是兩個(即「file:////testserver/docs/testdoc.doc」)Response.Redirect結果在「對象移動到這裏」

這通常伴隨着「System.Threading.ThreadAbortException:線程被中止」消息。

我在其他地方尋找了一個解決方案,發現了一些關於Response.Redirect引起ThreadAbort異常的有趣東西,但這似乎並不是根本問題 - 在我看來,實際問題是「Object移到這裏「消息,這會導致異常被拋出。

有人有任何建議,爲什麼我得到那個......?

編輯:忘了提,我運行Firefox(3.5.7)與IE瀏覽器選項卡,所以是要提的是,當我想我最好還是嘗試在IE,瞧 - 它在IE (7)。

+0

這是否發生在多個瀏覽器?您是否嘗試過運行Fiddler來監視請求/響應,以查看原始HTTP響應? – 2010-02-02 14:19:34

+0

您使用的是什麼版本的.NET?這似乎是1.1天內的常見問題... – 2010-02-02 14:22:01

+0

以下是一些相關的SO帖子:[http://stackoverflow.com/questions/922648/response-redirect-not-always-redirecting](http:/ /stackoverflow.com/questions/922648/response-redirect-not-always-redirecting) [http://stackoverflow.com/questions/1497285/how-do-i-redirect-a-browser-to-a-local - 文件在asp網絡](http://stackoverflow.com/questions/1497285/how-do-i-redirect-a-browser-to-a-local-file-in-asp-net) – 2010-02-02 14:23:37

回答

13

這可能是由於Response.Redirect()方法在try-catch塊中造成的。我出現的解決方案是通過刷新重定向頭到客戶端來結束響應虛擬。一起來看看:

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

這對我很好用(用它來生成並返回一個webcal://協議iCal文件)雖然我不需要設置StatusDescription屬性 – 2013-01-03 16:25:48

+1

這也是這個問題的答案:http://stackoverflow.com/questions/347281/asp-net-custom-404-returns-200-ok-404-not- – 2013-07-26 12:08:15

22

只是以供將來參考的另一個原因可能發生這種情況是,如果你這樣做的Response.Redirect(空)或類似。我有一個情況,我的變量持有的URL是空的,這就是我得到的。

+0

在我的情況下,我發佈了null參數給一個'REST api',並且響應被重定向到了空URL代替生成的網址 – stom 2015-12-08 17:10:21

5

我剛剛遇到過這種情況。事實證明,我們有一些代碼,有效地做到:

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

顯然誰(前幸運了好一會兒)寫這個的人並沒有意識到,一個Response.Redirect的不,默認情況下,結束線程。

我不知道這樣做的後果是什麼,但這種情況的提琴手痕跡顯示出腐敗的重定向。這可能是一個共同發生的過程,但這是我們見過這個問題的唯一地方。與runat=server

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

在後面的代碼

0

使用錨元素:

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

試試看吧。

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

1

在MVC中,您可能會在RedirectToRoute()之後看到此內容。

如果您使用的工具如Fiddler,您應該會看到服務器響應的問題。我注意到500錯誤

在我而言,這是由物體引起的被添加到會議這是不可序列

2

這可能發生的另一個原因是您正在從https頁面重定向到http頁面。 將重定向網址更改爲https://爲我解決了問題。

+0

這也是我的問題,謝謝! – Guven 2016-07-18 20:03:19

2

這奏效了我,當我看到這個問題:

[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; 
    } 
} 
0

我通過我的全局字符串變量設置爲靜態固定的這個問題,因爲我的網址被複位,當我重定向到空。