次のように、古い 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 メソッドから実行されています。