web-dev-qa-db-ja.com

Response.Redirectの結果は「オブジェクトはここに移動しました」

私は通常、「file:」URLにリダイレクトされるC#ASP.NETページで作業しています。これは、ほとんどの状況でほとんどの場合うまく動作するようですが、ファイルへのリダイレクトの代わりに、時々(そして、私のテストシステムでは、どうやら常に)「テキストはここに移動しました」というページが表示されますここで、「here」はリダイレクト先のファイルへのリンクですが、コロンの後に2つではなく4つのスラッシュがあります(つまり、「file:////testserver/docs/testdoc.doc」)

通常、これには「System.Threading.ThreadAbortException:Thread was aborted」メッセージが付随します。

私は別の場所で解決策を探し、ThreadAbort例外を引き起こすResponse.Redirectに関する興味深いものを見つけましたが、それは根本的な問題ではないようです-実際の問題は「オブジェクトがここに移動しました」メッセージ。例外がスローされます。

誰が私がそれを得ている理由を提案しました...?

編集: 私はFirefox(3.5.7)をIE Tabで実行しているので、IEで試してみたほうがいいと思ったとき、できれば-で動作することを述べようとしていました。 IE(7)。

35
gkrogers

将来の参照のために、これが発生する可能性がある別の理由は、Response.Redirect(null)などのような操作を行った場合です。 URLを保持している変数がnullである状況があり、これが私が得たものです。

29
Dan Diplo

これは、Response.Redirect()メソッドをtry-catchブロック。私がやってきた解決策は、リダイレクトヘッダーをクライアントにフラッシュすることで、応答を終了する仮想的にすることでした。見てみましょう:

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

私はちょうどこれが起こっているケースに出くわしました。効果的なコードがいくつかあったことがわかりました。

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

明らかに、これを書いた人(幸運なことに以前)は、Response.Redirectがデフォルトでスレッドを終了しないことを認識していませんでした。

これを行うことの結果が何であるかはわかりませんが、この出来事のフィドラーの痕跡は破損したリダイレクトを示すように見えます。もちろんこれは偶然の一致かもしれませんが、これはこの問題を目にした唯一の場所です。

7
Chris Simpson

これが発生する可能性のあるもう1つの理由は、httpsページからhttpページにリダイレクトしていることです。リダイレクトURLをhttps://に変更すると、問題が修正されました。

3
cometfish

この問題を見たとき、これは私のためにトリックをしました:

[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;
    }
}
3
Wes

MVCでは、RedirectToRoute()の後に表示される場合があります。

Fiddlerのようなツールを使用する場合、サーバーの応答に問題があるはずです。 500エラーに気付きました。

私の場合、これはSessionに追加されるオブジェクトが原因でしたNOT Serializable.

1
cat5dev

runat=serverでアンカー要素を使用する

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

コードビハインドでは:

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

試してみる。

以前のStatus Code=301メソッドよりも優れた働きをします。

0
Kursat Turkay

リダイレクト時にURLが空にリセットされたため、グローバル文字列変数を静的に設定することでこの問題を修正しました。

0
DIZAD