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).
Ответы
Ответ 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-адрес был сброшен до пустого при перенаправлении.