【问题标题】:HTTP POST Redirect from Behind code c#从后面的代码 c# 重定向 HTTP POST
【发布时间】:2016-07-13 14:27:00
【问题描述】:
<form action="https://demo.bank.com/payment" method="post">
<input name="x_login" type="hidden" runat="server" id="x_login" />
<input name="x_amount" type="hidden" runat="server" id="x_amount" />
<input name="x_fp_sequence" type="hidden" runat="server" id="x_fp_sequence" />
<input name="x_fp_timestamp" type="hidden" runat="server" id="x_fp_timestamp" />
<input name="x_fp_hash" type="hidden" runat="server" id="x_fp_hash" />
<input name="x_show_form" type="hidden" runat="server" id="x_show_form" />
<input name="x_line_item" value="<%# Eval("Desc") %>" type="hidden" />
<input type="submit" name="submit" value="Submit" class="btn_confirm" />
</form>

以上是我用来将数据发布到银行网站以进行信用卡处理的示例代码。它工作正常,但我需要在代码后面执行此操作。我已经尝试过 WebClient() 和 HttpClient(),它们都只通过数据并且不重定向浏览器(除非我没有正确编码)。似乎没有将用户重定向到银行网站。这甚至可能吗?如果是这样,我该如何做到这一点? PS:对不起,我是新来将 POST 数据粘贴到外部 URL。

【问题讨论】:

  • @itsme86 在向银行提交数据时,他所拥有的测试代码非常常见。他需要将其转换为以编程方式执行 POST,而无需 UI。
  • 没错。这是一个测试代码。我需要在没有 UI 的情况下以编程方式完成。
  • 第一条评论有一个链接,指向一堆如何以编程方式进行操作的示例,你需要的一切都应该在里面。
  • 我确实实现了 HttpClient() 和 WebClient() 并且它们都没有将我重定向到 POST URL。我需要客户端浏览器转到 POST URL,因为它会解析值并将其显示在结帐页面中,从而允许他们输入信用卡信息。感谢您指出我可能做错了什么。

标签: c# asp.net http-post


【解决方案1】:

您必须打开连接并通过 WebClient 发布您的值。记住 webclient 只是一个包装器。为了简单起见,我只添加了两个参数,一个是空的 (x_login),另一个是带值的。您必须包含密钥才能被序列化和发布。

<input name="x_login" type="hidden" runat="server" id="x_login" />
<input name="x_line_item**" value="<%# Eval("Desc") %>" type="hidden" />
using(WebClient client = new WebClient())
{
    var reqparm = new System.Collections.Specialized.NameValueCollection();
    reqparm.Add("x_login", ""); // You're sending the key with en empty value
    reqparm.Add("x_line_item", Eval("Desc") );
    byte[] responsebytes = client.UploadValues("https://demo.bank.com/payment", "POST", reqparm);
    string responsebody = Encoding.UTF8.GetString(responsebytes);
}

【讨论】:

  • 快速提问,我能否将相同的字符串名称添加两次。我需要遍历一个列表并为 x_line_item 发出多个字符串值。那可能吗?我可以创建一个 foreach 循环来添加多个 x_line_item。银行需要多个行项目字符串键,而不是一个。 reqparm.Add("x_line_item", Eval("Desc") );
  • 当然,没有限制。事实上,您将发布一个非常正常的元素数组。根据它们的处理方式,可能会有一些限制,但我认为如果您已经收到添加 N 个相同类型元素的要求,它会起作用。
  • 我试过了,我不能在NameValueCollection中添加多个x_line_item。它看到 x_line_item 已经存在并以逗号分隔附加新的键值。
  • NameValueCollection 就是这样处理的。自己尝试添加两个或多个值,您会看到浏览器将其转换为完全相同的 csv 列表
  • 我现在很困惑。我做了很多阅读,我似乎无法将它连接到它通过 POST 数据到 ACTION URL 的位置,同时将我带到那个 ACTION URL。我只能将回复发回我自己的网页。我需要它的工作方式是通过按钮使用 POST 动词发布一些订单详细信息,然后它将用户重定向到 POST 页面,他们可以在其中输入信用卡进行付款。
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多