LoginSignup
9
10

More than 5 years have passed since last update.

POSTでリダイレクトする

Posted at

はじめに

とあるWEBページで、GETストリングで受け取った値をページロード時に
別のサイトへPOSTでリダイレクトする必要があったので、その方法をメモっておきます。

.NETの性質上POSTデータを送る場合以下のようなことになる。

  • ASP.NETの構想として、他のページ(特に他のAppドメイン)への遷移はGETを利用を想定。(セキュリティ面などから)
     コンセプトとして、POSTはPOSTBACKのみの利用。

  • 例外として、LinkButtonコントロールを使うと、ノンコーディングでPOST送信で画面遷移ができる。
     このとき、ページ上のコントロールのidが、そのままPOST変数名になる。
     ただし、渡したくないコントロールの情報についてもPOSTされてしまう。(ボタン名やViewStateなど)そこをクリアすればこの方法でOK。

  • LinkButtonが使えない場合は、JavaScriptで組むしか無い。

参考 http://social.msdn.microsoft.com/Forums/ja-JP/7a023755-35c6-40b3-b9d1-3b53981c1d06/postresponseredirectweb?forum=aspnetja

というわけで、ページロード時にリダイレクトしたいので、
.NET と JavaScript の組合せで対応しました。

え?JavaScript だけでやっちゃえば、いいじゃない?
その方法も試してみましたが、自分のテストが悪かったかもしれませんが、
URLエンコードされた文字列をJavaScriptで正しく解釈できなかったので、
このような形になりました。

まあ、.NET + JavaScriptの構成にしたおかげでページロード時に
.NET側で複雑な処理をさせることもできるようになりました。
(今回のサンプルではやっていませんが。)

サンプルコード

RedirectSample.aspx
<%@ Page Language="vb" ResponseEncoding="UTF-8" %>
<% 
    txtval.Text = System.Web.HttpUtility.HtmlDecode(Page.Request.QueryString.Get("val"))
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function doPost() {
            document.getElementById("val").value = document.getElementById("txtval").value
            document.form1.method = "post";
            document.form1.submit();
            //    return false;
        }
    </script>
</head>
<body>
<form name="form1"  action="http://example.com/dest_post.aspx" method="post">
    <input type="hidden" name="val" id="val" value="" />
</form>
<form runat="server" ID="GETSTRING">
    <asp:TextBox ID="txtval" runat="server" Enabled="false" style="width:1px;" ></asp:TextBox>
</form>
</body>
</html>
<script type="text/javascript">
   doPost();
</script>

仕様の簡単な説明

http://~~~/RedirectSample.aspx?txtval=hogehoge のようなリクエストがくると
txtvalの値をGETで受け取り、
http://example.com/dest_post.aspx へPOST送信でリダイレクトしています。

<form>タグを分割することによってリダイレクト先のPOST送信する変数名をカスタマイズしているところが
ポイントです。

最後に

セキュリティ上の理由で、このようなPOST送信はいけないような気がしますが、
こうすることにより、誰がどうなってどのように困るのか、私の貧困な想像力では分かりませんでした。
分かる方がいましたらお教えて頂けると嬉しいです。

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10