ASP.NETのこれらのクラスの違いは何ですか?私が発見したように、これらのクラス間に継承関係はありません。
以下のコードはHttpRequestWrapper
のインスタンスを返します。これはis a
HttpRequestBase
およびhas a
HttpRequest
HttpRequestMessage request = ...;
HttpRequestBase reqBase = (request.Properties["MS_HttpContext"] as HttpContextWrapper).Request;
// do somthing with reqBase.Cookies
マイクロソフトはHttpRequestMessageからCookieにアクセスしている間、私たちを困らせたかったようです。
request.Properties["MS_HttpContext"]
がnullにならないことが保証されていますか?
または、AjaxリクエストはApiControllerのアクションで処理されると考えます。 2つの異なる方法でクライアントのIPにアクセスできます。
var ip = (request.Properties["MS_HttpContext"] as HttpContextWrapper).Request.UserHostAddress
var ip = HttpContext.Current.Request.UserHostAddress
これら2つの違いは何ですか?
または、一般に、Cookie、ヘッダー、リクエスター情報など、同じリクエスト/レスポンスデータにさまざまな方法でアクセスできます。どちらを使用するか? 「ajaxリクエストの場合、何かが足りないためにHttpRequestが正常に動作することが保証されていないので、代わりにHttpRequestMessageを使用する必要があります」などと言えますか?
HttpRequest は Page および serControl クラスにGET専用プロパティとして存在します。同様に、独自のプロパティのほとんどもGET専用です( 1 を参照)。このクラスは、着信HTTPリクエストに関する情報を取得するためにASP.NETページで使用されます。クライアントIP、Cookie、クエリ文字列などを読み取ります。重要なのは、.NET 1.1以降に存在する「古い」System.Webアセンブリの一部であるということです。
HttpRequestMessage は、一方で、.NET 4.5の新機能です。 System.Net の一部です。クライアントとサービスの両方で使用して、HTTP経由で要求と応答を作成、送信、受信できます。 HttpWebRequest を置き換えます。これは.NET 4.5で廃止されました
HttpRequestBaseとHttpRequestWrapperでできることは、 docs を引用することです。
HttpRequestWrapperクラスは、HttpRequestBaseクラスから派生し、HttpRequestクラスのラッパーとして機能します。このクラスは、HttpRequestクラスの機能を公開し、HttpRequestBase型を公開します。 HttpRequestBaseクラスを使用すると、ASP.NETパイプラインの外部でユニットテストを実行する場合など、アプリケーションのHttpRequestクラスの元の実装をカスタム実装に置き換えることができます。