302 редирект все еще пытается запустить оригинальный запрос - PullRequest
3 голосов
/ 28 июля 2011

У нас есть фрагмент кода, который обнаруживает старые 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 перемещено временно» выбрасывается на домашнюю страницу по умолчанию.

ПРОБЛЕМА: Проблема, с которой я сталкиваюсь, заключается в следующем.Если введен URL (скажем, «/ product / ABC123», например).Перенаправление URL 301 не выполняется, и перенаправление 302 в перехвате выполняется, однако исходный URL ("/ product / ABC123") все еще выполняется в фоновом режиме.Когда я запускаю веб-сайт в отладчике, перенаправление 302 работает нормально, и открывается домашняя страница по умолчанию, а через полсекунды выполняется дополнительная страница с ошибкой сервера 500 из-за того, что исходный URL небольше приемлемо.

Мой вопрос таков: как я могу полностью остановить исходный запрос и просто позволить перенаправлению 302 делать то, что ему нужно.Я пытался "HttpContext.ApplicationInstance.CompleteRequest ();"ниже «Response.End ()», но он не остановил исходный запрос.

РЕДАКТИРОВАТЬ: Код перенаправления выполняется из метода Index класса Controller.

1 Ответ

5 голосов
/ 28 июля 2011

Если вы находитесь в действии контроллера, выйдите из метода действия, вернув new HttpStatusCodeResult(302).

...