Response.Redirect, какие данные POST для другого URL-адреса в ASP.NET

Я хочу перенаправить ответ на другой URL, пока он содержит некоторые данные POST в нем HTTP-заголовок.

// Inside an ASP.NET page code behind:
Response.Redirect("http://www.example.com/?data=sent%20via%20GET");
// This will sent data to http://www.example.com via GET.
// I want to POST this data to http://www.example.com instead.

Как это сделать в ASP.NET?

Ответ 1

вы можете отправить огромные данные и с этим трюком.

Response.Clear();

StringBuilder sb = new StringBuilder();
sb.Append("<html>");
sb.AppendFormat(@"<body onload='document.forms[""form""].submit()'>");
sb.AppendFormat("<form name='form' action='{0}' method='post'>",postbackUrl);
sb.AppendFormat("<input type='hidden' name='id' value='{0}'>", id);
// Other params go here
sb.Append("</form>");
sb.Append("</body>");
sb.Append("</html>");

Response.Write(sb.ToString());

Response.End();

Ответ 2

Вы не можете использовать POST с помощью перенаправления. По определению перенаправление означает, что сервер отправляет 302 код перенаправления HTTP-статуса клиенту с новым местоположением, чтобы клиент выдавал запрос GET на это новое место. Это то, как работает протокол HTTP, и вы не можете этого сделать.

Таким образом, одним из способов достижения этой цели будет перенаправление на некоторую временную страницу, которая будет содержать HTML <form> с method="POST" и содержащий значения, которые вы хотите отправить в виде скрытых полей. Затем вы можете использовать javascript для автоматической отправки этой формы.

Ответ 3

Хотя это довольно старая нить, я думал, что поделюсь тем, как я это сделаю.

Предположим, что отправкой страницы является a.aspx, а страница назначения - b.aspx.

  • Соберите пользовательские входы в a.aspx. Пользователь нажимает кнопку отправки, которая вызывает обратную передачу.
  • внутри события Button_click a.aspx, данные объема процесса (например, сохранить загруженные двоичные файлы). Определите ссылку на данные объема и добавьте ее в конец строки имени-значения request.form.
  • Зашифровать конечную строку имени и установить ее в файл cookie.
  • Перенаправление на b.aspx
  • в b.aspx, извлеките этот файл cookie, расшифруйте и получите всю пару имя-значение. Теперь обработайте их как обычно.

Преимущества: (a) b.aspx отображается в адресной строке браузера. Он входит в историю браузера. Server.transfer делают это. (б) Это дает эффект сообщения. Пользователи не могут видеть пару имя-значение в querystring.

Ответ 4

Вы можете использовать viewstate для "переноса" данных и чтения на новой странице или даже на той же странице.