2009-11-10 5 views
8

Pardonnez-moi si c'est une question stupide. Je ne suis pas très expérimenté en programmation Web. Je suis en train d'implémenter le composant de paiement de mon application .net mvc. Le composant interagit avec un service de paiement externe. Le service de paiement accepte la demande de poste http sous la forme suivanteGénérer une requête http du contrôleur

http://somepaymentservice.com/pay.do?MerchantID=xxx&Price=xxx&otherparameters 

Je sais que c'est mort facile à faire en ajoutant une forme dans la vue. Cependant, je ne veux pas que mes vues traitent de paramètres de tiers. Je souhaite que mon affichage envoie des informations à mon contrôleur, puis le contrôleur génère l'URL requise et envoie la demande. Voici le pseudo code.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult PayForOrder(OrderForm order) 
{ 
    var url = _paymentService.GetUrlFromOrder(order); 
    SendPostRequest(url); 
    return View("FinishedPayment"); 
} 

Est-il possible de le faire? Est-ce que C# a une bibliothèque intégrée pour générer une requête http? Merci d'avance.

+0

Pouvez-vous nous dire comment vous avez fait cela? – Raha

+0

J'ai fait ce qu'Andy a suggéré. –

Répondre

6

Vous devez utiliser la classe HttpWebRequest. Veillez à définir la propriété Method à publier - an example.

+0

Merci. Tu as sauvé ma journée. –

3

Il existe certainement une bibliothèque intégrée pour générer des requêtes http. Voici deux fonctions utiles que j'ai rapidement converties de VB.NET en C#. La première méthode effectue un post le second effectue un get. J'espère que vous les trouverez utiles.

Vous devez vous assurer d'importer l'espace de noms System.Net.

public static HttpWebResponse SendPostRequest(string data, string url) 
{ 

    //Data parameter Example 
    //string data = "name=" + value 

    HttpWebRequest httpRequest = HttpWebRequest.Create(url); 
    httpRequest.Method = "POST"; 
    httpRequest.ContentType = "application/x-www-form-urlencoded"; 
    httpRequest.ContentLength = data.Length; 

    var streamWriter = new StreamWriter(httpRequest.GetRequestStream()); 
    streamWriter.Write(data); 
    streamWriter.Close(); 

    return httpRequest.GetResponse(); 
} 

public static HttpWebResponse SendGetRequest(string url) 
{ 

    HttpWebRequest httpRequest = HttpWebRequest.Create(url); 
    httpRequest.Method = "GET"; 

    return httpRequest.GetResponse(); 
} 
2

Cela fait vraiment une différence si ASP.NET fait une requête ou si le client fait une requête. Si la documentation du fournisseur indique que vous devez utiliser un formulaire avec l'action donnée qui doit être soumise par le navigateur client, cela peut être nécessaire.

Dans de nombreux cas, l'utilisateur (le client) publie des valeurs pour le fournisseur, entre des données sur le site du fournisseur et ensuite redirigé vers votre site. Vous ne pouvez pas faire ce flux d'applications sur le serveur.

Questions connexes