【问题标题】:How to redirect ASP.NET MVC with a POST?如何使用 POST 重定向 ASP.NET MVC?
【发布时间】:2014-01-22 16:53:27
【问题描述】:

我正在为一个网站设置一个支付页面,它首先完成一个简单的购物车,然后当用户点击“提交”时,我需要将交易数据发布到外部信用卡处理网站,并重定向用户访问该站点。一旦他们在那里输入了他们的信用卡详细信息,网站就会重定向回我,无论是批准还是拒绝。

问题是,我在 MVC 界面中看不到任何允许我使用 POST 操作重定向的内容。 Redirect() 方法使用 GET(在第 3 方站点上无论如何都不起作用)。我尝试使用WebClient.UploadValues() 编写程序化帖子,然后我从该字符串中返回一个字符串,我可以通过返回Content() 向用户呈现该字符串 - 但随后该表单内的链接应该与 CC 处理相关网站,而是被解释为相对于我的网站,这对我来说没有什么用处。

我该怎么做?

【问题讨论】:

  • 你不能直接发布到那个网站吗?
  • @TimBJames - 不,我需要做一些预处理来生成我自己的交易 ID 等。
  • @Shaul - 关键是您在点击结帐页面之前生成了这些内容。例如,您的交易 ID 可以确定地基于您的购物车 ID、客户 ID 等,以便您可以在将交易发布到卡处理器之前生成它。

标签: asp.net-mvc-3


【解决方案1】:

您不能使用帖子重定向。

但是你可以这样做:

  • 接收帖子并在上面做一些事情
  • 向用户返回一个视图,其中包含一个填充了包含已处理数据的隐藏字段的表单
  • 使用 javascript 自动提交表单(在您的 CC 提供商上设置发布操作)
  • 用户转到抄送提供商
  • 用户返回您的网站

编辑 - 使用 jQuery,表单 ID 为 ccform 的表单发布,操作设置为 cc 提供者的 URL 和隐藏字段:

$.ready(function() { $('#ccform').submit(); });

【讨论】:

  • 哈哈,这是@tvanfosson 回避的“邪恶”建议。 :-) 由于我根本不熟悉 javascript,您能否提供一个代码示例来说明如何做到这一点?
  • 这是“邪恶的”,但如果您想使用 POST,则无法以任何其他方式完成。但我同意您的 CC 提供商应该为您提供更好的 API。
  • 感谢编辑!我怎么知道要为“#ccform”输入什么字符串?以及如何使用Html.BeginForm 发布到远程站点?
  • @Shaul 请参阅this,了解有关发布到外部站点的示例。对于ID,我想您不需要它。只需使用$('form').submit(); 就可以了
【解决方案2】:

根据您的信用卡处理提供商,机制可能会有所不同。通常,您可以使用带有 URL 参数的 GET,然后他们将使用这些参数来填充会话并重定向到收集信用卡信息的表单,或者更有可能使用他们的 URL 作为结帐页面上的操作这样它就可以直接发布到他们的网站上。检查您的提供商的文档和示例,因为该机制将取决于他们支持的内容。

【讨论】:

  • 使用带有 URL 参数的 GET 不起作用。发布确实有效 - 但我从您的回答中感到不安,即 MVC3 不支持程序化发布。那是对的吗?如果是这样,他们为什么要这样设计?
  • @Shaul 不幸的是,我相信程序化发布没有在 mvc 中实现。
  • 通常您会生成视图,其中的表单指向信用卡处理器的站点。通常,如果您直接发布到他们的网站,而不是使用一些带外 API,您会在 for 的隐藏(或其他)字段中生成他们需要的所有数据,并将其直接发布到他们的网站。除了使用 javascript 生成一个自动提交表单的页面之外,没有任何方法可以从服务器强制浏览器在其他地方发布。我会认为自动提交是邪恶的,因此没有必要与提供者合作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2014-12-31
  • 2016-01-12
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多