Je souhaite rediriger une réponse vers une autre URL alors qu'elle contient des données POST dans son en-tête 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.
Comment faire cela dans ASP.NET?
vous pouvez aussi envoyer d’énormes données avec cette astuce.
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();
Vous ne pouvez pas POST utiliser une redirection. Par définition, une redirection signifie que le serveur envoie un code d’état HTTP de redirection 302 au client avec le nouvel emplacement afin que le client envoie une demande GET à ce nouvel emplacement. C'est ainsi que fonctionne le protocole HTTP et que vous ne pouvez pas le faire.
Ainsi, un moyen d'y parvenir serait de rediriger vers une page temporaire contenant un <form>
HTML avec method="POST"
et contenant les valeurs que vous voulez envoyer en tant que champs masqués. Ensuite, vous pouvez utiliser javascript pour soumettre automatiquement ce formulaire.
Vous pouvez utiliser viewstate pour "transférer" les données et les lire sur une nouvelle page ou même sur la même page.
Bien que ce soit un fil assez ancien, je pensais que je partagerais comment je le fais.
Disons que l'envoi d'une page est a.aspx et que la page de destination est b.aspx.
Avantages: (A) b.aspx est affiché dans la barre d'adresse du navigateur. Il entre dans l'histoire du navigateur. Server.transfer effectue ces opérations. (B) Cela donne effet de post. Les utilisateurs ne peuvent pas voir la paire nom-valeur dans la chaîne de requête.