4

Dans une action du contrôleur, j'envoie manuellement un formulaire à une URL distante à l'aide de WebRequest. Je reçois avec succès un WebResponse contenant une page html à afficher. Je voudrais "coller" cette réponse comme réponse (de type HttpResponseBase) de l'action. Une action renvoie normalement un ActionResult. Comment puis-je conclure mon action de contrôleur afin que WebResponse soit le résultat?WebResponse à HttpResponseBase. C'est possible?

Remarque: l'URL dans le navigateur doit également devenir l'URL de la réponse.

Mise à jour: Voici l'objectif. C'est sur une page de paiement PayPal. Au lieu d'avoir un formulaire avec tous les champs cachés du panier et un bouton d'envoi de commande à mon avis, je voudrais un bouton de commande simple lié à l'une de mes actions. Dans cette action, je vais préparer le WebRequest avec le formulaire et l'envoyer à paypal. Faire ceci dans une action me permet également de stocker l'ordre inactivé dans une table de DB de sorte que quand la confirmation de commande vient je peux le comparer avec l'ordre stocké et l'activer.

Solution: merci à ceux qui ont répondu pour avoir fait remarquer que cela ne serait pas possible de rediriger avec un POST. Il semble que je ne suis pas obligé de rediriger vers paypal avec un POST. Au lieu de cela je peux construire une URL avec toutes les données de chariot dans la chaîne de requête et rediriger vers elle. Le faire à partir d'une méthode d'action du contrôleur me permet toujours de stocker l'ordre en attente dans une base de données.

Merci

Répondre

4

Si vous voulez juste le contenu de la réponse WebRequest à renvoyer dans la réponse de votre action du contrôleur, vous pourriez faire quelque chose comme ceci dans votre méthode d'action:

WebRequest req = WebRequest.Create("http://www.google.com"); 
WebResponse res = req.GetResponse(); 
StreamReader sr = new StreamReader(res.GetResponseStream()); 

ContentResult cr = new ContentResult(); 
cr.Content = sr.ReadToEnd(); 

return cr; 

cette est encore plus concis:

WebRequest req = WebRequest.Create("http://www.google.com"); 
WebResponse res = req.GetResponse(); 

FileStreamResult fsr = new FileStreamResult(res.GetResponseStream(),res.ContentType); 

return fsr; 
+0

Merci. Le problème est que le contenu n'est pas suffisant (voir ma mise à jour ci-dessus). Le résultat contient également en-tête et peut-être des cookies. Si je viens de définir le contenu, toutes ces données ne seront pas utilisées. Le résultat net est que l'Url dans le navigateur n'est pas correct (il devrait être quelque chose comme https: // ... paypal .../....). Aussi en ce moment j'utilise le bac à sable paypal pour mes tests. Même si je suis connecté au sandbox dans le même navigateur, la réponse de paypal est que je ne suis pas connecté au sandbox. –

+0

Je ne connais pas PayPal, mais pourquoi utilisez-vous WebRequest pour le faire? Je suppose qu'ils ont une API ou quelque chose. Vous devriez examiner cela. En ce qui concerne ma solution, vous pouvez tout aussi bien copier les cookies et autres en-têtes de WebResponse dans la réponse de votre action. – Matthew

0

Il n'y a aucun moyen direct de le faire. Je ne sais pas grand chose sur ASp.NET. Sommes-nous en train de dire que votre page ASP.net envoie une requête HTTP à un site distant, et récupère une réponse, et que vous voulez que cette réponse devienne un HTTPResponseBase? Qu'est-ce que tu veux faire après ça?

Voir la suite Thread sur un sujet similaire ... How do I mock HttpResponseBase.End()?

Questions connexes