4

コントローラー アクションで、WebRequest を使用して手動でフォームをリモート URL に送信しています。表示する HTML ページを含む WebResponse を正常に受信しました。この応答をアクションの (HttpResponseBase 型の) 応答として「貼り付け」たいと思います。通常、アクションは ActionResult を返しますが、WebResponse が結果になるようにコントローラー アクションを終了するにはどうすればよいでしょうか?

注: ブラウザーの URL は、応答の URL にもなる必要があります。

更新:これが目標です。これはペイパルのチェックアウトページにあります。ビューにすべてのカート非表示フィールドとチェックアウト送信ボタンを含むフォームを表示する代わりに、アクションの 1 つにリンクされた単純なチェックアウト ボタンが必要です。このアクションでは、フォームを使用して WebRequest を準備し、paypal に送信します。アクションでこれを行うと、非アクティブ化された注文を DB テーブルに保存できるので、注文の確認が来たときに、保存されている注文と比較してアクティブ化できます。

解決策: これを POST でリダイレクトすることはできないと指摘してくれた回答者に感謝します。POST でペイパルにリダイレクトする義務はないようです。代わりに、クエリ文字列内のすべてのカート データを使用して URL を作成し、その 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 についてあまり知りません。AASP.net ページがリモート サイトに対して HTTP 要求を実行し、応答を取得していて、その応答を HTTPResponseBase にしたいということですか? その後どうしたいですか?

同様のトピックに関する次の SO スレッドを参照してください... HttpResponseBase.End() をモックするにはどうすればよいですか?

于 2009-11-11T15:28:00.750 に答える