Для этого необходимо понять, как работает перенаправление HTTP. Когда вы используете Response.Redirect()
, вы отправляете ответ (браузеру, который сделал запрос) с HTTP Status Code 302 , который сообщает браузеру, куда идти дальше. По определению браузер сделает это с помощью запроса GET
, даже если исходный запрос был POST
.
Другим вариантом является использование HTTP Status Code 307 , который указывает, что браузер должен выполнить запрос на перенаправление так же, как и исходный запрос, но для предупреждения пользователя с предупреждением безопасности. Для этого вы должны написать что-то вроде этого:
public void PageLoad(object sender, EventArgs e)
{
// Process the post on your side
Response.Status = "307 Temporary Redirect";
Response.AddHeader("Location", "http://example.com/page/to/post.to");
}
К сожалению, это не всегда работает. Разные браузеры реализуют это по-разному , поскольку это не общий код состояния.
Увы, в отличие от разработчиков Opera и FireFox, разработчики IE никогда не читали спецификацию, и даже самый последний, самый безопасный IE7 перенаправит POST-запрос из домена A в домен B без каких-либо предупреждений или диалогов подтверждения! Safari также действует интересным образом, хотя он не вызывает диалоговое окно подтверждения и выполняет перенаправление, он отбрасывает данные POST, эффективно изменяя перенаправление 307 на более распространенные 302.
Итак, насколько я знаю, единственный способ реализовать что-то подобное - это использовать Javascript. Есть два варианта, которые я могу придумать вне головы:
- Создайте форму и укажите ее атрибут
action
на стороннем сервере. Затем добавьте событие click к кнопке отправки, которая сначала выполняет запрос AJAX на ваш сервер с данными, а затем разрешает отправку формы на сторонний сервер.
- Создайте форму для публикации на вашем сервере. Когда форма отправлена, покажите пользователю страницу, на которой есть форма со всеми данными, которые вы хотите передать, все в скрытом виде. Просто покажите сообщение типа «Перенаправление ...». Затем добавьте событие javascript на страницу, которая отправляет форму на сторонний сервер.
Из двух я бы выбрал второе по двум причинам. Во-первых, он более надежен, чем первый, потому что Javascript не требуется для его работы; для тех, у кого она не включена, вы всегда можете сделать видимой кнопку отправки для скрытой формы и дать им команду нажать ее, если это займет более 5 секунд. Во-вторых, вы можете решить, какие данные будут передаваться на сторонний сервер; если вы просто обрабатываете форму по мере ее прохождения, вы будете передавать все почтовые данные, что не всегда то, что вы хотите. То же самое для решения 307, при условии, что оно работает для всех ваших пользователей.
Надеюсь, это поможет!