Столкнулся с ситуацией, когда необходимо сделать Redirect на другую страницу, передав при этом параметр, но так, чтобы не видел пользователь. То есть простая передача через QueryString - Response.Redirect(“~/NewPage.aspx?id=5”) - не подходит.
А как вы решали подобную задачу? :-)
Я придумал решение, используя QueryString и Session:
Пример:
надо передать параметр id на страницу NewPage.aspx
Сам редирект делаем как обычно, параметр передаем через QueryString.
Response.Redirect("~/NewPage.aspx?id=5")
Но принимающая страница по-особому обрабатывает запрос:
public partial class NewPage : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
if (Session["NewPage_id"] != null)
{
// Второй запрос приходит сюда
int id = Int32.Parse(Session["NewPage_id"].ToString());
// Используем id
// ...
// Освобождаем память
Session["NewPage_id"] = null;
}
else if (Request["id"] != null)
{
// Первый запрос приходит сюда
Session["NewPage_id"] = Request["id"];
// Редирект без QueryString
Response.Redirect(GetUriWithoutQueryStr(Request.Url), true);
}
}
public string GetUriWithoutQueryStr(Uri url)
{
return url.GetLeftPart(UriPartial.Path);
}
}
Мы сохраняем пришедший параметр в сессию, и редиректимся на эту же страницу без QueryString. При второй загрузке параметры спокойно извлекаются из сессии и используются. Пользователь, естественно, в строке запроса никаких параметров не видит.
После извлечения параметра лучше сразу удалить его из сессии, чтобы он не повлиял на последующие запросы.
А как вы решали подобную задачу? :-)
Однако представьте, что нужно отправить форму удаленному серверу, и ответом должен быть редирект на другую страницу с необходимыми параметрами. И мы хотим, чтобы ползователь параметров не увидел. Вот тут-то и пригодится способ, описанный в этой статье.
Ну может тогда через твиттер передавать параметры :)
Действительно, нет смысла так извращаться, если редирект происходит на страницу, находящуюся в том же web-приложении (т.е. обе страницы имеют доступ одной и той же Session).
Мой способ может пригодиться, если редирект приходит с другого сервера
Session["NewPage_id"] = 5;
Response.Redirect("~/NewPage.aspx");
Я нутром чувствую, что все на так просто… но все же