2011-01-07 13 views
0

データを収集するページと別のサイトにPOSTを持っています。私はちょうど彼がフォームタグのアクションにサイトのURLを置くことができますが、サイトを切り替える前に私のデータベースに情報を記録したいと思います。 ActionResultではこれまでのところ、私は持っている:MVC2 ActionResultを使用して、別のサイトに(Post)をリダイレクトする方法

[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(); 

誰もがこれを終えると、これは他のサイトにデータをポスト持つように適切な「リターン」varientの使用方法を知っています。

以下のレスポンスに基づいてスニペットを編集しました。

答えて

0

POSTは既に行われているので、あなたのために機能する魔法の弾丸(つまり簡単なActionResult)はありません。サーバー上でPOST応答を処理しているので、ターゲットサーバーへのPOST要求を自分で再作成する必要があります。これを行うにはthis answerHttpWebRequestを利用する必要があります。応答をHttpWebRequestから返信した後、おそらくContentResultを介してその応答を戻す必要があります。全体として、それは自明ではありませんが、可能です。

更新: スニペットに基づいて、私は次のように追加してみたい:

WebResponse res = myRequest.GetResponse(); 
StreamReader sr = new StreamReader(res.GetResponseStream()); 
string returnvalue = sr.ReadToEnd(); 
return Content(returnValue); 
+0

私はこれを一度に持っていましたが、次のステップを知りませんでした。レスポンスからContentResultを構築するにはどうすればよいでしょうか? – Randy

+0

上記のスニペットを編集しました。 – Randy

+0

@Randy、私は提案で私の答えを変更しました。 –

0

別のオプションは、他のサイトにあるフォームのアクションをポイントし、サーバーへのAjaxのポストを行うことであろうフォームを提出する前にそれは、HttpWebRequestを使ってman-in-the-middleをプレイするよりはるかに簡単です。

+1

真ん中の人が正しいです。この種の質問はいつも私にとって魚のようなにおいをします。 –

関連する問題