3

次のように、古い URL を検出してリダイレクトを実行するコードのセクションがあります。

Response.Clear();
Response.StatusCode = 301;
Response.Status = "301 Moved Permanently";
try
{
    Response.AddHeader("Location", MyLink.GetFullPath());
} catch
{
    Response.StatusCode = 302;
    Response.Status = "302 Moved Temporarily";
    Response.AddHeader("Location", "/");
}
Response.End();

基本的に何が起こっているかというと、301 パーマネント リダイレクトが試行され、これが成功しない場合、「302 Moved Temporarily」がデフォルトのホームページにスローされます。

問題:私が遭遇している問題は次のとおりです。URL が入力された場合 (たとえば、「/product/ABC123」とします)。URL 301 リダイレクトは失敗し、キャッチ内の 302 リダイレクトが実行されますが、元の URL (「/product/ABC123」) は引き続きバックグラウンドで実行されます。デバッガーで Web サイトを実行すると、302 リダイレクトが正常に機能し、デフォルトのホームページが表示され、0.5 秒後に補助ページが実行され、元の URL が存在しないためにサーバー 500 エラーが表示されます。もはや許容されます。

私の質問は次のとおりです。元のリクエストを完全に停止し、302 リダイレクトに必要なことをさせるにはどうすればよいですか。「HttpContext.ApplicationInstance.CompleteRequest();」を試しました 「Response.End()」の下にありますが、元のリクエストは停止しませんでした。

編集:リダイレクト コードは、Controller クラスの Index メソッドから実行されています。

4

1 に答える 1

4

コントローラー アクションを使用している場合は、 を返してアクション メソッドを終了しnew HttpStatusCodeResult(302)ます。

于 2011-07-28T13:14:54.183 に答える