4

在控制器操作中,我使用 WebRequest 手动将表单发送到远程 URL。我成功接收到一个包含要显示的 html 页面的 WebResponse。我想将此响应“粘贴”为操作的响应(类型为 HttpResponseBase)。一个动作通常会返回一个 ActionResult,那么我如何结束我的控制器动作以便 WebResponse 成为结果?

注意:浏览器中的 Url 也必须成为响应的 url。

更新:这是目标。这是在贝宝结帐页面上。我不想在我的视图中拥有一个包含所有购物车隐藏字段和一个结帐提交按钮的表单,我想要一个链接到我的一个操作的简单结帐按钮。在此操作中,我将准备带有表单的 WebRequest 并将其发送到 paypal。在操作中执行此操作还允许我将未激活的订单存储在数据库表中,这样当订单确认到来时,我可以将其与存储的订单进行比较并激活它。

解决方案:感谢那些回答指出无法通过 POST 重定向的人。看来我没有义务通过 POST 重定向到贝宝。相反,我可以使用查询字符串中的所有购物车数据构造一个 URL 并重定向到它。从控制器操作方法执行此操作仍然允许我将挂单存储在数据库中。

谢谢

4

2 回答 2

4

如果您只是希望 WebRequest 响应的内容在您的控制器操作的响应中发送回,您可以在您的操作方法中执行以下操作:

WebRequest req = WebRequest.Create("http://www.google.com");
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());

ContentResult cr = new ContentResult();
cr.Content = sr.ReadToEnd();

return cr;

这更简洁:

WebRequest req = WebRequest.Create("http://www.google.com");
WebResponse res = req.GetResponse();

FileStreamResult fsr = new FileStreamResult(res.GetResponseStream(),res.ContentType);

return fsr;
于 2009-11-11T15:27:08.340 回答
0

没有直接的方法可以做到这一点。我不太了解 ASp.NET。您是说您的 ASP.net 页面正在向远程站点发出 HTTP 请求,并返回响应,并且您希望该响应成为 HTTPResponseBase?之后你想用它做什么?

请参阅有关类似主题的以下 SO 线程... 如何模拟 HttpResponseBase.End()?

于 2009-11-11T15:28:00.750 回答