IIS6, ASP.NET 2.0, без проверки подлинности с помощью форм
Я звоню в Response.Redirect ("~ / foo.aspx"), но для моего сайта появляется документ по умолчанию ("Default.aspx"). Что еще хуже, это происходит только с перерывами. Иногда редирект отображает правильную страницу.
Я проверил состояние сеанса и не вижу никаких значений в файле web.config (то есть я предполагаю, что я использую 20-минутные значения по умолчанию).
Хотелось бы, чтобы у меня было больше актуальной информации (я постараюсь ответить на любые вопросы).
Есть идеи? Почему он не перенаправляет на указанную страницу?
РЕДАКТИРОВАТЬ: Я посмотрел deeeeeper в код и узнал больше деталей.
Ok. Там есть foo.aspx и foo2.aspx (и документ по умолчанию, Default.aspx). Все страницы расширяются от BasePage, который расширяет страницу.
BasePage имеет свойство с именем ReturnPage:
protected string ReturnPage {
get {
if (Session["ReturnPage"] == null) {
Session["ReturnPage"] = "";
}
return Session["ReturnPage"].ToString();
}
set { Session["ReturnPage"] = value; }
}
Пользователи нажимают на LinkButton на foo.aspx, и обработчик события click заканчивается двумя строками кода:
ReturnPage = ResolveUrl("~/foo.aspx");
Response.Redirect(ResolveUrl("~/foo2.aspx"));
Page_Load файла foo2.aspx имеет проблемы, и его обработка ошибок вызывает Response.Redirect (ReturnPage).
Когда я просматриваю заголовки ответов в foo2.aspx, местоположение 302 - это строка. Пусто (то есть ее нет). Тот же заголовок ответа имеет тот же идентификатор сеанса ASP.NET, что и ответ foo.aspx.
И помните - это с перебоями. Иногда вы можете нажать на эту LinkButton и без усилий перейти на foo2.aspx, без проблем. Вы можете обработать щелчок с точно такими же данными один раз, и он потерпит неудачу. Вы перейдете из документа по умолчанию (Default.aspx, куда вас отправил «баг») обратно в foo.aspx, снова щелкните с теми же данными (та же строка в таблице / таблице - тот же LinkButton, по существу), и вы будете перенаправлены на foo2.aspx без проблем.