[解決済み] [Solved] Response.Redirect with POST instead of Get?
質問
フォームから送信されたデータを保存し、ユーザーをサイト外のページにリダイレクトする必要があるのですが、リダイレクトの際に、GETではなくPOSTでフォームを送信する必要があります。
これを簡単に実現する方法があればいいなと思ったのですが、ないような気がしてきました。 私は今、私が望むフォームを持つ単純な別のページを作成し、そこにリダイレクトし、フォーム変数を入力し、そして単にdocument.forms[0].submit()を呼ぶスクリプトにbody.onloadコールをしなければならないと思う。
どなたか代替案があれば教えていただけませんか? プロジェクトの後半でこれを調整する必要があるかもしれないし、ちょっと複雑になるかもしれないので、他のページに依存しない簡単な方法があれば、それは素晴らしいことだと思います。
とにかく、すべての回答をありがとうございました。
解決方法は?
これを行うには、HTTPリダイレクトの仕組みを理解する必要があります。 あなたが
Response.Redirect()
で、(リクエストを行ったブラウザに)レスポンスを送信します。
HTTPステータスコード 302
これは、ブラウザが次にどこへ行けばよいかを示すものです。 定義によれば、ブラウザは、このことを
GET
リクエストであっても、元のリクエストが
POST
.
また、別の方法として HTTPステータスコード307 これは、ブラウザが元のリクエストと同じ方法でリダイレクトリクエストを行うが、セキュリティ警告をユーザーに表示することを指定します。 これを行うには、次のように記述します。
public void PageLoad(object sender, EventArgs e)
{
// Process the post on your side
Response.Status = "307 Temporary Redirect";
Response.AddHeader("Location", "http://example.com/page/to/post.to");
}
残念ながら、これはいつもうまくいくわけではありません。 ブラウザによって実装が異なる 一般的なステータスコードではないためです。
<ブロッククオート残念なことに、Opera や FireFox の開発者と異なり、IEの開発者はこの仕様を読んだことがなく、最新の最も安全な IE7 でさえ、警告や確認ダイアログなしにドメイン A からドメイン B へ POST リクエストをリダイレクトしてしまいます Safariもまた興味深い振る舞いをします。確認ダイアログを出さずにリダイレクトを実行する一方で、POSTデータを捨ててしまうのです。 307リダイレクトをより一般的な302リダイレクトに効果的に変更することができます。
ですから、私の知る限り、このようなものを実装する唯一の方法は、Javascriptを使用することでしょう。 私の頭の中では、2つの選択肢があります。
-
フォームを作成し、その
action
属性はサードパーティサーバーを指します。 次に、送信ボタンにクリックイベントを追加して、まずデータとともにあなたのサーバーにAJAXリクエストを実行し、それからサードパーティのサーバーにフォームが送信されるようにします。 - サーバーに投稿するためのフォームを作成します。 フォームが送信されたら、ユーザーに、渡したいデータをすべて隠し入力したフォームがあるページを見せます。 リダイレクト中です..."のようなメッセージを表示するだけです。 そして、そのページにjavascriptのイベントを追加して、サードパーティのサーバーにフォームを送信します。
この2つのうち、私なら2番目を選びます。理由は2つあります。 1つ目は、1つ目の方法よりもJavascriptが不要なので信頼性が高いことです。Javascriptを有効にしていない人には、隠しフォームの送信ボタンを常に見えるようにしておき、5秒以上かかったら押すように指示すればよいのです。 次に、どのデータをサードパーティサーバーに送信するかを決めることができます。フォームをそのまま処理するだけでは、投稿データをすべて渡すことになり、必ずしも望むものではありません。 307のソリューションも同様で、すべてのユーザーに対して有効であったと仮定します。
お役に立てれば幸いです。
関連
-
[解決済み] 指定されたCGIアプリケーションでエラーが発生し、サーバーがプロセスを終了した
-
[解決済み] "システムが指定されたファイルを見つけられませんでした"
-
[解決済み] クリスタル・レポート データソースを変更すると「ドキュメントの保存に失敗しました」と表示される
-
[解決済み] Microsoft Jet データベースエンジンは、オブジェクト 'Sheet1$' を見つけられませんでした。
-
[解決済み] jquery の post 呼び出しから asp.net ページに html マークアップを送信する際に、潜在的に危険な Request.QueryString 値がクライアントから検出されました。
-
$.ajax access backend 500 (Internal Server Error)
-
[解決済み] jQueryでドロップダウンリストの選択値を変更する
-
[解決済み] Ajaxリクエストが200 OKを返すが、successではなくerrorイベントが発生する
-
[解決済み】Server.TransferとResponse.Redirectの違いについて
-
[解決済み】Response.RedirectでSystem.Threading.ThreadAbortExceptionが発生するのはなぜか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】レスポンスのコンテンツタイプをCSVにする
-
[解決済み】エラー :リモートサーバーがエラーを返しました。(401) Unauthorized
-
[解決済み] vti_cnf」「_vti_pvt」「_vti_script」「_vti_txt」フォルダは何ですか?
-
[解決済み] リモートホストが接続を閉じました。エラーコードは0x800704CDです。
-
[解決済み] targetFramework' 属性が認識されません。属性名は大文字と小文字を区別することに注意してください
-
[解決済み] ASP.NET Ajaxクライアントサイドフレームワークのロードに失敗しました。
-
クライアントから危険な可能性のある Request.Path 値が検出されました。
-
ASP.NET図書館管理システム簡易実装ステップ
-
[解決済み] DBNull 型から String 型への変換は無効です。
-
[解決済み] IIS Managerにアクセスするにはどうすればよいですか?