2009-11-10 25 views
8

Perdóname si esta es una pregunta estúpida. No tengo mucha experiencia con la programación web. Estoy implementando el componente de pago de mi aplicación .net mvc. El componente interactúa con un servicio de pago externo. El servicio de pago acepta la solicitud HTTP POST de la siguiente formaGenerar una solicitud posterior a HTTP desde el controlador

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

Sé que esto está muerto fácil de hacer mediante la adición de un formulario en la vista. Sin embargo, no quiero que mis puntos de vista aborden los parámetros de terceros. Me gustaría que mi vista envíe información a mi controlador, luego el controlador genera la url requerida y luego envía la solicitud. A continuación está el pseudo código.

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

¿Es posible hacerlo? ¿Tiene C# una biblioteca incorporada para generar una solicitud http? Gracias de antemano.

+0

¿Puede decirnos cómo lo hizo? – Raha

+0

Hice lo que Andy sugirió. –

Respuesta

6

Querrá utilizar la clase HttpWebRequest. Asegúrese de establecer la propiedad de Método para publicar; aquí está an example.

+0

Gracias. Salvaste mi día. –

3

Sin duda hay una biblioteca incorporada para generar solicitudes http. A continuación hay dos funciones útiles que convertí rápidamente de VB.NET a C#. El primer método realiza una publicación y el segundo realiza una obtención. Espero que los encuentres útiles.

Querrá asegurarse de importar el espacio de nombres de 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

Realmente hace la diferencia si ASP.NET realiza una solicitud o si el cliente realiza una solicitud. Si la documentación del proveedor dice que debe usar un formulario con la acción determinada que debe enviar el navegador del cliente, puede ser necesario.

En muchos casos, el usuario (el cliente) publica algunos valores para el proveedor, ingresa algunos datos en el sitio de los proveedores y luego es redirigido a su sitio nuevamente. No puede hacer este flujo de aplicaciones en el lado del servidor.

Cuestiones relacionadas