web-dev-qa-db-ja.com

ASP.NETの別のURLにデータをPOSTするResponse.Redirect

HTTPヘッダーにPOSTデータが含まれている場合に、別のURLに応答をリダイレクトしたい。

// Inside an ASP.NET page code behind:
Response.Redirect("http://www.example.com/?data=sent%20via%20GET");
// This will sent data to http://www.example.com via GET.
// I want to POST this data to http://www.example.com instead.

ASP.NETでこれを行う方法?

15
Xaqron

このトリックでも巨大なデータを送信できます。

Response.Clear();

StringBuilder sb = new StringBuilder();
sb.Append("<html>");
sb.AppendFormat(@"<body onload='document.forms[""form""].submit()'>");
sb.AppendFormat("<form name='form' action='{0}' method='post'>",postbackUrl);
sb.AppendFormat("<input type='hidden' name='id' value='{0}'>", id);
// Other params go here
sb.Append("</form>");
sb.Append("</body>");
sb.Append("</html>");

Response.Write(sb.ToString());

Response.End();

POSTリダイレクトを使用することはできません。リダイレクトとは、サーバーが302リダイレクトHTTPステータスコードを新しい場所でクライアントに送信することを意味します。これにより、クライアントはこの新しい場所にGETリクエストを発行しますこれは、HTTPプロトコルが機能する方法であり、それについて実行できる方法はありません。

したがって、これを実現する1つの方法は、HTML <form>method="POST"を含み、非表示フィールドとして送信する値を含む一時ページにリダイレクトすることです。次に、JavaScriptを使用してこのフォームを自動送信できます。

12
Darin Dimitrov

Viewstateを使用してデータを「転送」し、新しいページまたは同じページで読み取ることができます。

0
Idan Shechter

かなり古いスレッドですが、自分のやり方を共有したいと思いました。

送信ページがa.aspxで宛先ページがb.aspxだとします。

  1. A.aspxでユーザー入力を収集します。ユーザーが送信ボタンをクリックすると、ポストバックが発生します。
  2. a.aspxのButton_clickイベント内で、ボリュームデータを処理します(たとえば、アップロードされたバイナリファイルを保存します)。ボリュームデータのリンクを特定し、それをrequest.form名前と値の文字列の最後に追加します。
  3. 最終的な名前と値の文字列を暗号化し、Cookieに設定します。
  4. B.aspxにリダイレクトします
  5. b.aspxで、そのCookieを取得して復号化すると、すべての名前と値のペアを取得できます。通常どおりに処理します。

利点:(a)b.aspxがブラウザーのアドレスバーに表示されます。ブラウザの履歴に入ります。 Server.transferはこれらを行います。 (b)ポストの効果を与える。ユーザーはクエリ文字列で名前と値のペアを表示できません。

0
Kish