我有一个页面收集数据和'POST'到另一个站点。我可以将他的网站网址放在表单标记的操作中,但我想在切换网站之前将信息记录在我的数据库中。到目前为止,在ActionResult中我有:
[HttpPost]
public ActionResult MyPage(MyPageModel model)
{
if (ModelState.IsValid)
{
StoreDate(model.fld1, model.fld2)
var encoding = new ASCIIEncoding();
var postData = "";
foreach (String postKey in Request.Form)
{
var postValue = Encode(Request.Form[postKey]);
postData += string.Format("&{0}={1}", postKey, postValue);
}
var data = encoding.GetBytes(postData);
// Prepare web request...
var myRequest = (HttpWebRequest)WebRequest.Create("https://www.site2.com");
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
// Send the data.
Stream newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Flush();
newStream.Close();
有没有人知道如何完成此操作并使用正确的'return'变量将此数据发布到其他网站。
我根据下面的回复编辑了代码段。
答案 0 :(得分:0)
POST已经发生了,所以不会有一个适合你的灵丹妙药(即一个简单的ActionResult
)。由于您正在服务器上处理POST响应,因此您需要自己重新创建对目标服务器的POST请求。要做到这一点,您需要利用HttpWebRequest
对this answer。{从HttpWebRequest
收到回复后,您需要传回该回复,可能是通过ContentResult
。总而言之,这将是非平凡的,但它是可能的。
<强>更新强>: 根据您的代码段,我会尝试添加以下内容:
WebResponse res = myRequest.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string returnvalue = sr.ReadToEnd();
return Content(returnValue);
答案 1 :(得分:0)
另一种选择是将表单操作指向其他站点,并在提交表单之前对服务器执行ajax发布。这比用HttpWebRequest打中间人要容易得多。