Ce faisant, il faut comprendre comment les redirections HTTP travail. Lorsque vous utilisez Response.Redirect()
, de vous envoyer une réponse (pour le navigateur qui fait la demande), avec le Code d'État HTTP 302, qui indique au navigateur où aller. Par définition, le navigateur va faire que par l'intermédiaire d'un GET
la demande, même si la demande originale a été un POST
.
Une autre option est d'utiliser le Code d'État HTTP 307, qui spécifie que le navigateur doit faire la demande de redirection de la même façon que l'original de la demande, mais pour demander à l'utilisateur un avertissement de sécurité. Pour ce faire, vous devez écrire quelque chose comme ceci:
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");
}
Malheureusement, cela ne fonctionne pas toujours. Les différents navigateurs de mettre en œuvre de façon différente, car il n'est pas un code d'état.
Hélas, à la différence de l'Opéra et des développeurs de FireFox, IE les développeurs n'ont jamais lu la spec, et même la dernière, la plus sécurisée IE7 va rediriger la requête POST de domaine A domaine B, sans que les avertissements ou les boîtes de dialogue de confirmation! Safari agit également de façon intéressante, même si elle ne suscite pas une boîte de dialogue de confirmation et effectue la redirection, il jette les données POST, effectivement changer 307 rediriger dans le plus commun 302.
Donc, autant que je sache, la seule façon de mettre en œuvre quelque chose qui serait à l'utilisation de Javascript. Il y a deux options que je peux penser à du haut de ma tête:
- Créer le formulaire et c'est
action
de l'attribut pointer vers le serveur tiers. Ensuite, ajoutez un événement click pour le bouton submit qui exécute pour la première fois une requête AJAX à votre serveur avec les données, et permet ensuite le formulaire pour être soumis au serveur tiers.
- Créer le formulaire à poster sur votre serveur. Lorsque le formulaire est soumis, montrer à l'utilisateur une page qui contient un formulaire avec toutes les données que vous souhaitez passer, toutes cachées dans les entrées. Juste afficher un message du genre "Redirection...". Ensuite, ajoutez un événement javascript de la page qui envoie le formulaire au serveur tiers.
De deux, je choisirais la deuxième, pour deux raisons. Tout d'abord, il est plus fiable que la première parce que le Javascript n'est pas nécessaire pour qu'il fonctionne; pour ceux qui ne l'ont pas activé, vous pouvez toujours vous rendre sur le bouton soumettre pour la forme cachée visible, et de lui demander de presse si cela prend plus de 5 secondes. Ensuite, vous pouvez décider quelles données sont transmises au serveur tiers; si vous utilisez seulement le processus de la forme qu'il se passe, vous serez en passant le long de toutes les données post, qui n'est pas toujours ce que vous voulez. De même pour la 307 solution, en supposant qu'il a travaillé pour tous vos utilisateurs.
Espérons que cette aide!