5

リダイレクトなしではサーバー上の QueryString を変更できないと思いました。

しかし、このコードは機能します*:

Request.QueryString編集

私はとても驚いています。

したがって、これに関する私の質問は次のとおりです。

  1. Request.QueryString が読み取り専用なのはなぜですか?
  2. このコード/ハックが機能するのはなぜですか*?
  3. 悪いエラーや予期しない動作に関して、またコードの維持と理解に関して、編集が終了したらすぐに読み取り専用に変更した場合、どれくらい安全ですか?
  4. PageLoad と OnPageRender のみを使用している場合、イベント サイクルのどこでこのクレイジーな編集を行うのが最も理にかなっているでしょうか?

*詳細:

タブにグループ化されたアイテムを含むページがあります。各タブは asp:LinkBut​​ton です

特定のタブに直接リンクできるようにしたい。私は QueryString パラメータ 'tab=tabName' でそれを行います。できます。しかし、新しいタブをクリックすると、クエリ文字列はまだ URL にあるため、クリックしたタブではなく、クエリ文字列で指定されたタブがアクティブになります。

Request.QueryString editを使用すると、これは発生しません。次に、私のソリューションは「機能します」。

前もって感謝します。

4

2 に答える 2

10

QueryString プロパティは、単一の要求では変更できないため、読み取り専用です。明らかに、ブラウザーは 1 つの文字列のみを含む 1 つの要求のみを送信するため、1 つのコレクションのみが作成されます。ハックはリフレクション (つまり、コードとメモリを操作する) を使用して、通常は変更できないものを変更します。このハックは、QueryString プロパティのカプセル化と設計を破ります。使用しないでください。デザインの観点からは意味がありません。クエリは変更されないのに、それを表すオブジェクトを変更する理由は何ですか? ブラウザーのみが新しいクエリ文字列を送信できるため、基本的に、ブラウザーが送信したものについて独自のコードに嘘をついています。

タブで URL を使用する場合は、LinkBut​​ton の代わりにハイパーリンクを使用します。

于 2011-02-11T12:05:01.303 に答える
2

私が読んだことから、これはすべてのブラウザが準拠しているセキュリティ標準です。主な目的は、誰かがWebサイトwww.MyLameWarcraftPhishingSite.comを持っている可能性があるフィッシング攻撃を阻止することです。誰かがページにアクセスしたときに、URLをwww.blizzard.comのように書き直します。そのURLに到達する唯一の方法は次のとおりです。実際にそれにリダイレクトします。

うーん、最後の投稿は2月11日でした-これで投稿しても大丈夫だといいのですが。

于 2011-06-07T19:55:54.763 に答える