Сгенерировать http-запрос от контроллера - PullRequest
8 голосов
/ 10 ноября 2009

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

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-запроса? Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 10 ноября 2009

Вы захотите использовать класс HttpWebRequest . Обязательно установите свойство Method для публикации - вот пример .

4 голосов
/ 10 ноября 2009

Конечно, есть встроенная библиотека для генерации 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 голосов
/ 10 ноября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...