2009-11-10 3 views
8

Простите меня, если это глупый вопрос. Я не очень разбираюсь в веб-программировании. Я реализую компонент оплаты моего приложения .net mvc. Компонент взаимодействует с внешним платежным сервисом. Оплаты услуг принимает запрос HTTP POST в следующей формеСгенерировать почтовый запрос от контроллера

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

Я знаю, что это мертвый легко сделать путем добавления формы в View. Однако я не хочу, чтобы мои взгляды касались параметров третьей стороны. Я хотел бы, чтобы мое представление передавало информацию моему контроллеру, тогда контроллер генерирует требуемый URL-адрес и затем отправляет запрос. Ниже приведен псевдокод.

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

Возможно ли это? Имеет ли C# встроенную библиотеку для генерации HTTP-запроса? Спасибо заранее.

+0

Можете ли вы рассказать нам, как вы это сделали? – Raha

+0

Я сделал то, что предложил Энди. –

ответ

6

Вы хотите использовать класс HttpWebRequest. Обязательно установите для свойства Method сообщение: an example.

+0

Спасибо. Ты спас свой день. –

3

Для создания HTTP-запросов существует встроенная библиотека. Ниже приведены две полезные функции, которые я быстро преобразовал из VB.NET в C#. Первый метод выполняет пост, второй выполняет get. Надеюсь, вы найдете их полезными.

Вы обязательно захотите импортировать пространство имен 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

Это действительно имеет значение, если ASP.NET делает запрос или клиент делает запрос. Если в документации поставщика указано, что вы должны использовать форму с данным действием, которое должно быть отправлено браузером клиента, это может быть необходимо.

Во многих случаях пользователь (клиент) отправляет некоторые данные поставщику, вводит некоторые данные на сайт провайдеров, а затем перенаправляется на ваш сайт снова. Вы не можете использовать этот прикладной процесс на сервере.

Смежные вопросы