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でこれを行う方法?
このトリックでも巨大なデータを送信できます。
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を使用してこのフォームを自動送信できます。
Viewstateを使用してデータを「転送」し、新しいページまたは同じページで読み取ることができます。
かなり古いスレッドですが、自分のやり方を共有したいと思いました。
送信ページがa.aspxで宛先ページがb.aspxだとします。
利点:(a)b.aspxがブラウザーのアドレスバーに表示されます。ブラウザの履歴に入ります。 Server.transferはこれらを行います。 (b)ポストの効果を与える。ユーザーはクエリ文字列で名前と値のペアを表示できません。