【问题标题】:Generate http post request from controller从控制器生成 http post 请求
【发布时间】:2009-11-10 03:20:35
【问题描述】:

如果这是一个愚蠢的问题,请原谅我。我对 Web 编程不是很有经验。 我正在实现我的 .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 请求? 提前致谢。

【问题讨论】:

  • 你能告诉我们你是怎么做到的吗?

标签: c# .net asp.net-mvc


【解决方案1】:

您需要使用HttpWebRequest 类。请务必将 Method 属性设置为 post - 这里是 an example

【讨论】:

  • 第二个链接失效
【解决方案2】:

当然有一个内置的库来生成 http 请求。以下是我快速从 VB.NET 转换为 C# 的两个有用函数。第一种方法执行 post,第二种方法执行 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();
}

【讨论】:

    【解决方案3】:

    如果 ASP.NET 发出请求或客户端发出请求,这确实会有所不同。 如果提供者的文档说您应该使用必须由客户端浏览器提交的具有给定操作的表单,那么这可能是必要的。

    在很多情况下,用户(客户)向提供者发布一些值,在提供者站点输入一些数据,然后再次被重定向到您的站点。您不能在服务器端执行此应用程序流。

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2015-02-23
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多