从控制器生成http post请求
问题描述:
如果这是一个愚蠢的问题,请原谅我。我对Web编程不是很有经验。 我正在实施我的.net mvc应用程序的付款组件。该组件与外部支付服务交互。支付服务接受以下形式的http post请求从控制器生成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请求? 在此先感谢。
答
确实有一个内置库来生成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();
}
答
如果ASP.NET发出请求或客户端发出请求,那么它真的有区别。 如果提供者的文档说你应该使用必须由客户端浏览器提供给定操作的表单,那么这可能是必需的。
在很多情况下,用户(客户端)向提供者发布一些值,在提供者站点输入一些数据,然后再次重定向到您的站点。您不能在服务器端执行此应用程序流。
你能告诉我们你是怎么做到的吗? – Raha 2011-10-12 23:31:00
我做了安迪的建议。 – 2011-10-13 00:04:22