この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 17081|答える: 2

[ASP.NET] HttpContext.Current.Items

[リンクをコピー]
掲載地 2018/02/11 10:42:10 | | | |

HTTPはステートレスプロトコルです。 各リクエストは独立しており、その実行や結果は前のリクエストや次のリクエストに直接関係しておらず、前回のリクエストへの応答や次のリクエストへの応答に直接影響を受けることはありません。

実際、私たちのシステムはしばしばクライアントブラウザとサーバー間で同じデータ(状態)を共有することをサポートしています。例えば、ユーザーのログインアカウント情報など複数のリクエストが求められます。 したがって、ASP.NET は状態管理のための多くの変数を提供します:アプリケーション状態、セッション状態、ビュー状態など。

HttpContextオブジェクトは単一のHTTPリクエスト専用です。このクラスのプロパティには、Requestオブジェクト、Responseオブジェクト、Sessionオブジェクトなども含まれます。 これはHttpContextクラスのItemsコレクションで、キーバリューの形でハッシュテーブルオブジェクトを含みます。

まず、HttpContext.Current.Itemsの目的を見てみましょう。これは単一のユーザーリクエスト(単一のHTTPRequestに有効なHttpContext.Current.Items)にのみ動作します。 このリクエストが完了すると、サーバー情報がブラウザに返送される際にアイテムコレクションは失われます。 セッションオブジェクトはユーザーのセッション用であり、複数のユーザーリクエストに反応し、セッション終了後に情報が失われます。

HttpContext.Current.Itemsのライフサイクルが非常に短いため、どのような状況で使用できるのでしょうか? ここでは、HttpContext.Current.ItemsはHttpModuleとHTTPHandler間でデータ共有を行うことができることに注意しています。なぜなら、すべてのユーザーリクエストはHTTPランタイムパイプラインであるHTTPModule(HTTPHandler)を経由するためです。 IHttpMoudleメソッドを実装して、HttpMoudle経由でユーザーリクエストに情報を渡す場合、 HttpContext.Current.Itemsを使って異なるリクエストページやHttpモジュールでデータを転送できますが、リクエスト終了後にデータが投稿されると、このコレクション内のデータは自動的に失われてしまいます。 以下の図に示されています:




さらに、サーバーページがジャンプする際(Server.Execute/Server.Transfer)、HttpContext.Current.Items を使って2つのフォーム間でデータをやり取りできます。
明らかに、Server.TransferをResponse.Redirectに変更すると、新しいページのHttpContext.Current.Itemsのデータは取得できません。なぜなら、それは別のHttpリクエストだからです。 System.NullReferenceException:オブジェクト参照はオブジェクトのインスタンスに設定されていません。





先の:イーサリアムネットワークに基づく仮想通貨発行まで20分
次に:インテリジェント端末の利用シナリオと意義について考える
 地主| 掲載地 2023/06/30 20:35:38 |
ThreadStatic、CallContext、HttpContextの違い ASP.NET
https://www.itsvse.com/thread-10620-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com