none
ASP画面【ASP.NETではないです。すみません。】でPOSTとGETで挙動が違う RRS feed

  • 質問

  • 最初に、まずASP.NETのネタでない事をお詫びします。

     

    今、ASPで作られた現行システムの改修をしています。

    ASPの画面の中に、SQLServerのレポーティングサービスで画面を表示するように改修したいのです。

     

    まず、ASPの画面を構成する仮想ディレクトリがありまして、

    新規にSQLServerのレポートを表示する仮想ディレクトリを作成しました。

     

    プログラムの流れとしては、

    1.レポートの表示に必要なパラメータを用意する(ASP画面)

    2.「1」からパラメータを受け取る(ASP画面)

    3.「2」のASPの処理の中で、レポートのURLに「2」で受け取ったパラメータを付加して、

      リダイレクトする。

     

    また、初期表示の挙動として、「1」~「3」を【自動的に】デフォルト表示するよう、スクリプトで組んであります。

    (初期表示、真っ白では困るので、あたかも「1」の画面でパラメータを渡したかのような動きを最初にさせる)

     

    この時点で、ASPとSQLServerの二つの仮想サイトを挟んでいます(超えているという?)。

     

    この初期表示時点では、問題がないのですが、

    「1」の画面からまた違ったパラメータを渡そうと試みるのですが、

    なぜか、「2」で受け取れません。(Requestが無いようです)。

     

    散々悩んで、まさかこんな所関係ないよな・・・と思いつつ、

    document.myForm.method="post" を

    document.myForm.method="get" に変えてみると???

     

    なんとデータが受け取れたのです!!!

     

    自分の中では、getでは持ちきれないデータ量の場合、postにするという認識だったので、

    容量の問題は関係ない」と思っていたので、かなりショックです。(目からウロコ・・・とも違いますが)

     

    「その認識は甘い!!」という厳しい方にご指導いただければと思います。

    よろしくお願いいたします。

     

    2007年10月3日 2:18

すべての返信

  • 2でデータを取り出すときにどのようにしてますか?
    Request.QueryStringとか使ってませんか?

    GETとPOSTの場合でデータの送られ方が異なりますし、それを取り出す方法も異なります。

    ということを念頭に置いて利用しているメソッドのドキュメントをきちんと読んでみてください。

    2007年10月3日 3:15
  • データの取り出し方は、Request("xxx")で取り出しています。

    (この取り方の場合、getでもpostでもデータを受け取れます)

     

    「3」の時点で、レポーティングサービスにリダイレクトせず、

    自分のサイト内のファイルを呼び出すようにしている場合は、

    「1」から「2」の時点でデータがわたっているのです。

     

    つまり、SQLのレポート画面にリダイレクトするように変えると、

    「1」から「2」の時点のパラメータの渡しがおかしくなるのです。

    2007年10月3日 4:00
  • 一点。

     

    レポーティングサービスに渡そうとしている GET、POST のデータはどちらも同じ値になってますか?

    処理ロジック上、どこかで値が変わったりしてないかなぁ? と思った次第です。

    2007年10月7日 9:39
  • 返信ありがとうございます。

     

    以下がデータを送る直前のスクリプトになります。

    --------------------------

     document.myForm.action="test.asp"
     document.myForm.method="get"

     document.myForm.target="fTest"

     document.myForm.submit()
    --------------------------

    この箇所で、submitする前に、データを確認すると、

    get の場合も、postの場合もデータは持っているようです。

     

    次の引渡しページ「test.asp」でデータを参照しようとすると、

    getの場合はデータは入っていて、postの場合は入っていません。

     

    今回の修正前のシステムの場合、元々「post」で送信されていたので、

    postでもパラメータとしてデータは渡せていました。

     

    参照ができて値が違うという事はありえるとは思えませんが、

    ひとまずデータが渡っていればよいのですが、

    データが無いというのは困ったものです。。。

    2007年10月9日 1:26
  • うーん、そうですか…。きっと Request.Form("xxx") を使って POST データを扱ってもダメってことなんでしょうね…。

     

    ちょっと別の手段での調査方法になってしまいますけど、通信パケット上はどうなのでしょう?

    もしかしたらクライアントから何らかの理由で POST の場合には情報が送信されていないかもしれません。

     

    http://memo.blogdns.net/ethereal.html

    とか

    http://itpro.nikkeibp.co.jp/article/COLUMN/20060927/249194/

    を利用しながら、パケットを見てみたら何かわかるかもしれません。

    2007年10月9日 16:35