Подтвердить что ты не робот

Response.Redirect результаты в "Объект, перенесенный сюда"

Я работаю над страницей ASP.NET ASP.NET, которая обычно перенаправляется на URL-адрес "file:". Кажется, что это работает в большинстве случаев в большинстве случаев, но иногда (и, по моей тестовой системе, очевидно, всегда) вместо перенаправления на файл, я получаю страницу с текстом "Объект, перемещенный сюда", где "здесь" является ссылкой на файл, к которому я пытался перенаправить, но с четырьмя слэшами после двоеточия вместо двух (например, "файл:////testserver/docs/testdoc.doc" )

Обычно это сопровождается сообщением "Сообщение System.Threading.ThreadAbortException: Thread was aborted".

Я искал решение в другом месте и обнаружил некоторые интересные материалы о Response.Redirect, вызывающие исключения ThreadAbort, но это, похоже, не является основной проблемой - мне кажется, что фактической проблемой является "Объект, перемещенный" to here ", что вызывает исключение исключения.

У кого-нибудь есть предложения, почему я получаю это...?

EDIT: Забыл упомянуть, что я запускаю Firefox (3.5.7) с вкладкой IE, так что я хотел бы упомянуть, что, когда я думал, что лучше попробовать его в IE, и вуаля - он работает в IE (7).

4b9b3361

Ответ 1

Просто для будущего использования другая причина, по которой это может произойти, - это сделать что-то вроде Response.Redirect(null) или аналогичного. У меня была ситуация, когда моя переменная, содержащая URL-адрес, была нулевой, и это то, что я получил.

Ответ 2

Это может быть вызвано помещением метода Response.Redirect() в блок try-catch. Решение, с которым я пришел, состояло в том, чтобы закончить ответ практически, сбросив заголовок перенаправления клиенту. взгляните:

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

Ответ 3

Я только что встретил случай, когда это происходит. Оказывается, у нас был действительно эффективный код:

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

Очевидно, тот, кто написал это (к тому же, к счастью, к счастью), не понял, что Response.Redirect по умолчанию не завершает поток.

Я не знаю, каковы последствия этого, а вот скрипичный след этого происходит, чтобы показать коррумпированную переадресацию. Конечно, это может быть совпадение, но это единственное место, где мы видели эту проблему.

Ответ 4

Другая причина может заключаться в том, что вы перенаправляете страницу https на страницу http. Изменение URL-адреса переадресации также будет https://исправлено для меня проблема.

Ответ 5

Это помогло мне, когда я увидел эту проблему:

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

Ответ 6

В MVC вы можете увидеть это после RedirectToRoute().

Если вы используете такой инструмент, как Fiddler, вы должны увидеть проблему с ответом сервера. Я заметил ошибку 500.

В моем случае это было вызвано добавлением объекта в Сессия, которая была NOT Serializable.

Ответ 7

Используйте анкерный элемент с runat=server

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

В коде позади:

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

Попробуйте.

Работает лучше, чем предыдущий метод Status Code=301.

Ответ 8

Я исправил эту проблему, установив мою глобальную строковую переменную в static, потому что мой URL-адрес был сброшен до пустого при перенаправлении.