36

私は、通常は "file:" URL にリダイレクトされる C# ASP.NET ページに取り組んでいます。これは、ほとんどの状況で、ほとんどの場合は問題なく動作するように見えますが、ときどき (そして、私のテスト システムでは、明らかに常に) ファイルへのリダイレクトの代わりに、「オブジェクトがここに移動しました」というテキストを含むページが表示されます。 、ここで、「ここ」はリダイレクトしようとしていたファイルへのリンクですが、コロンの後に2つではなく4つのスラッシュが付いています(つまり、「file:////testserver/docs/testdoc.doc」)

これには通常、「System.Threading.ThreadAbortException: Thread was being aborted」というメッセージが伴います。

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

なぜ私がそれを手に入れたのか、誰か提案がありましたか...?

編集: IEタブでFirefox(3.5.7)を実行していることを忘れていたので、IEで試してみるといいと思ったときにそれを言及しようとしていました-IE(7)で動作します。

4

8 に答える 8

31

今後の参考のために、これが発生する別の理由は、Response.Redirect(null) などを実行した場合です。URL を保持している変数が null であるという状況がありましたが、これが得られたものです。

于 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

この問題を見たとき、これは私にとってはうまくいきました:

[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 Errorに気付きました。

私の場合、これは、 Serializableではないオブジェクトが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 に答える