在控制器操作中,我使用WebRequest手动将表单发送到远程URL。我成功收到一个包含要显示的html页面的WebResponse。我想将此响应“粘贴”为动作的响应(类型为HttpResponseBase)。一个动作通常返回一个ActionResult,那么如何结束我的控制器动作以便结果是WebResponse呢?
注意:浏览器中的Url也必须成为响应的网址。
更新:这是目标。这是在paypal结帐页面上。我想要一个简单的结账按钮链接到我的某个操作,而不是在我的视图中有一个包含所有购物车隐藏字段和结帐提交按钮的表单。在此操作中,我将使用表单准备WebRequest并将其发送到paypal。在操作中执行此操作还允许我将未激活的订单存储在数据库表中,以便在订单确认到来时我可以将其与存储的订单进行比较并激活它。
解决方案:感谢那些回答指出无法通过POST重定向的人。看来我没有义务通过POST重定向到paypal。相反,我可以构建一个包含查询字符串中所有购物车数据的URL并重定向到它。从控制器操作方法执行此操作仍允许我将挂单存储在数据库中。
由于
答案 0 :(得分: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;
答案 1 :(得分:0)
这不是直接的方法。我对ASp.NET了解不多。你是说你的ASP.net页面正在向远程站点发出HTTP请求,并获得响应,并且您希望该响应成为HTTPResponseBase?那之后你想用它做什么?
在类似主题上查看以下SO线程...... How do I mock HttpResponseBase.End()?