web-dev-qa-db-ja.com

Request ["key"] vs Request.Params ["key"] vs Request.QueryString ["key"]

Request["key"] vs Request.Params["key"] vs Request.QueryString["key"]

経験豊富なプログラマーはどの方法を使用しますか?なぜ?

70
Chris

Request.QueryString["key"]をお勧めします。クエリ文字列のRequest["Key"]と大きな違いはありませんが、ServerVariablesから値を取得しようとする場合、大きな(より大きな)違いがあります。 Request["Key"]は、QueryStringで値を探します。nullの場合、Form、次にCookie、最後にServerVariablesを探します。

Paramsを使用するのが最もコストがかかります。 paramsへの最初の要求は、新しいNameValueCollectionを作成し、QueryStringFormCookie、およびServerVariablesのそれぞれをこのコレクションに追加します。 2番目のリクエストでは、Request["Key"]よりもパフォーマンスが高くなります。

いくつかのキーのパフォーマンスの違いはかなり無視できると述べました。ここで重要なのは、コードが意図を示す必要があることであり、Request.QueryStringを使用すると、意図が何であるかが明確になります。

115
btlog

コードリーダーが正確にデータの取得元を知るのに役立つため、Request.QueryString["key"]を使用することを好みます。私はRequest.Params["key"]を使用しない傾向があります。これは、Cookie、クエリ文字列、および他のいくつかのものを参照できるためです。そのため、ユーザーは少し考えなければなりません。誰かがあなたが考えていることを理解する必要がある時間が少ないほど、コードを維持するのが簡単になります。

21
Phil

HttpRequest.ParamsまたはRequest.Paramsはhttprequestからほぼすべて(クエリ文字列、フォーム、Cookie、およびセッション変数)を取得しますが、Request.Querystringはクエリ文字列のみをプルします...すべては、その時点で何をしているかに依存します。

7
curtisk

コレクションは常に明示的に指定します。何らかの理由でオーバーライドを許可する場合は、それぞれに「get」をコーディングし、一方を選択するための階層を示す明確なコードを記述します。 IMO、明確なビジネス上の理由なしに複数のソースから価値を得るのは嫌いです。

親切なお知らせとして、web.configでrequestValidationMode = "4.5"を設定すると、両方のRequest.QueryString [“ key”]およびRequest [“ key”]は、設計として「遅延読み込み」動作を使用します。

ただし、何らかの方法でRequest.Params [“ key”]は4.0の動作として検証をトリガーします。

この奇妙な振る舞いは長い間私を本当に混乱させます。

0
cherishty