2009-11-10 10 views
8

Verzeihen Sie mir, wenn dies eine dumme Frage ist. Ich bin nicht sehr erfahren mit Web-Programmierung. Ich implementiere die Zahlungskomponente meiner .net mvc-Anwendung. Die Komponente interagiert mit einem externen Zahlungsdienst. Der Zahlungsservice nimmt HTTP POST-Anforderung in der folgenden Formhttp http Anfrage vom Controller generieren

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

Ich weiß, das ist einfach tot durch Hinzufügen einer Form in Aussicht zu tun. Ich möchte jedoch nicht, dass meine Ansichten sich mit Parametern Dritter befassen. Ich möchte, dass meine Ansicht Informationen an meinen Controller übermittelt, dann generiert der Controller die erforderliche URL und sendet dann die Anfrage aus. Folgendes ist der Pseudocode.

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

Ist es möglich, dies zu tun? Verfügt C# über eine integrierte Bibliothek zum Generieren einer HTTP-Anfrage? Vielen Dank im Voraus.

+0

Können Sie uns sagen, wie Sie das gemacht haben? – Raha

+0

Ich habe getan, was Andy vorgeschlagen hat. –

Antwort

6

Sie sollten die Klasse HttpWebRequest verwenden. Achten Sie darauf, die Eigenschaft "Method" auf post zu setzen - hier ist an example.

+0

Danke. Du hast meinen Tag gerettet. –

3

Es gibt sicherlich eine eingebaute Bibliothek, um HTTP-Anfragen zu generieren. Unten sind zwei hilfreiche Funktionen, die ich schnell von VB.NET zu C# konvertiert habe. Die erste Methode führt einen Post durch, die zweite führt einen Get aus. Ich hoffe, Sie finden sie nützlich.

Sie sollten sicherstellen, dass der System.Net-Namespace importiert wird.

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

Es macht wirklich einen Unterschied, ob ASP.NET eine Anfrage stellt oder der Client eine Anfrage stellt. Wenn die Dokumentation des Anbieters besagt, dass Sie ein Formular mit der angegebenen Aktion verwenden sollten, das vom Clientbrowser übermittelt werden muss, ist dies möglicherweise erforderlich.

In vielen Fällen postet der Benutzer (der Client) einige Werte an den Anbieter, gibt einige Daten auf der Seite des Anbieters ein und wird dann erneut auf Ihre Site umgeleitet. Sie können diesen Anwendungsablauf nicht serverseitig durchführen.