web-dev-qa-db-fra.com

Response.Redirect quelles données POST à ​​une autre URL dans ASP.NET

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?

15
Xaqron

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.

12
Darin Dimitrov

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.

0
Idan Shechter

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.

  1. Recueillez les entrées utilisateur dans a.aspx. L'utilisateur clique sur le bouton d'envoi qui provoque la publication.
  2. à l'intérieur de l'événement Button_click de a.aspx, traiter les données de volume (par exemple, enregistrer les fichiers binaires téléchargés). Déterminez le lien des données de volume et ajoutez-le à la fin de la chaîne nom-valeur request.form.
  3. Cryptez la chaîne nom-valeur finale et définissez-la comme cookie.
  4. Rediriger vers b.aspx
  5. dans b.aspx, récupérez ce cookie, décryptez et vous obtenez toutes les paires nom-valeur. Maintenant, traitez-les comme d'habitude.

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.

0
Kish