Как сохранить данные Request.Form
Это касается правильной пересылки переменных POST в ASP.Net
Чтобы заставить все соединения использовать протокол https, а не http, я вставил следующий код в Global.asax
If Not Request.IsSecureConnection Then
Response.Redirect("https://" & Request.ServerVariables("HTTP_HOST") + Request.RawUrl)
End If
Это работало нормально, пока я не столкнулся с формой, которая отправляется с использованием POST, и использование вышеуказанного метода нарушает процесс извлечения формы.
Например: веб-страница http://abc.com/page1.aspx (эта страница принимает только данные формы POST). теперь, когда приложение принудительно перенаправляет на https, страница корректно перенаправляется на https://abc.com/page1.aspx, однако все данные формы теряются в процессе.
Есть ли способ сохранить и переслать данные Request.Form?
2 ответа
Это почти то, для чего нужен код состояния HTTP 307. Возможно, вы захотите перенаправить их со статусом HTTP 307 вместо 302.
HTTP 307 означает перенаправление и повторную отправку POST-данных:
В этом случае запрос должен повторяться с другим URI, но в будущих запросах все еще может использоваться исходный URI.[2] В отличие от 303, метод запроса не должен изменяться при повторном выдаче исходного запроса. Например, запрос POST должен повторяться с использованием другого запроса POST.
В ASP.NET нет супер простого способа сделать это, но это не сложно. Например:
Response.StatusCode = 307;
Response.Status = "307 Temporary Redirect";
Response.AddHeader("Location","http://www.new-url.com");
В качестве альтернативы, вы можете использовать Server.Transfer(string)
также. Фил Хаак дает объяснение этому здесь. Это может быть проще для вас.
Sub Session_OnStart
If UCase(Request.ServerVariables("HTTPS")) = "OFF" Then
sRedirect = "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("PATH_INFO") & "?" & Request.Querystring
Response.Redirect sRedirect
End if
END Sub
Добавьте вышеперечисленное в ваш global.asa или global.asax.