ASP.NETコアのHttpContextを開発、ASP.NETの開発では、我々は常に、頻繁のHttpContextを使用します。
それでは、どのようにASP.NETコアでのHttpContextでそれを使うのですか、ここでは具体的な学習ASP.NETコアのHttpContextです。
インジェクションHttpContextAccessor
ASP.NETは、媒体コア提供IHttpContextAccessorインタフェース、HttpContextAccessorデフォルトはそれがアクセスのHttpContextを簡略化実現しました。
それはあなたがプログラムにHttpContextAccessorに得ることができるので、プログラムの起動時にIServicesCollectionに登録して、のHttpContextにアクセスするために使用する必要があります。
services.AddSingleton <IHttpContextAccessor、HttpContextAccessor>();
取得HttpContextAccessor
のは、実際の操作は、get HttpContextAccessorをやってみましょう。
新しいASP.NETコアWebアプリケーションを作成し、Webアプリケーションを選択します。認証は、認証のためにチェックされません。
HomeControllerは、次のコードを追加します。
パブリッククラスにHomeController:コントローラ { プライベートIHttpContextAccessorの_accessor。 公的にHomeController(IHttpContextAccessorアクセサ) { _accessor =アクセッサ。 } 公共IActionResultインデックス() { VARのHttpContext = _accessor.HttpContext。 ビューを返します(); } }
だから、のHttpContextに得ることができます
公共IActionResutインデックス() { VAR httpConetext = _accessor.HttpContext。 ビューを返します(); }
実行後HttpContextオブジェクトを取得することができます。また、プログラムが起動するとき、それはHttpContextAccessorに到達するために注入されている必要があり、上記と述べました。
それが注入されている新しいプログラムそう。
ここにあります
公共のボイドConfigureServices(IServiceCollectionサービスは) { //フレームワークサービスを追加します。 services.AddMvc(); }
services.AddMvc()が注入されます。
HttpContext.Currentを達成
私たちは、ASP.NETコアは今そうしていない、ASP.NETでの使用の多くHttpContext.CurrentのHttpContextを取得します。
それでも静的HttpContext.Currentを使用する場合でも、古いプログラムを移行のコストを削減、または達成することができます。
静的のHttpContextクラスを作成し、
パブリック静的クラスのHttpContext { プライベート静的IHttpContextAccessorの_accessor。 パブリック静的Microsoft.AspNetCore.Http.HttpContext電流=> _accessor.HttpContext。 内部静的ボイド設定(IHttpContextAccessorアクセサ) { _accessor =アクセッサ。 } }
そして、その後に拡張クラスを追加します。
パブリック静的クラスStaticHttpContextExtensions { 公共静的ボイドAddHttpContextAccessor(このIServiceCollectionサービス) { services.AddSingleton <IHttpContextAccessor、HttpContextAccessor>(); } パブリック静的IApplicationBuilder UseStaticHttpContext(このIApplicationBuilder APP) { VAR httpContextAccessor = app.ApplicationServices.GetRequiredService <IHttpContextAccessor>(); HttpContext.Configure(httpContextAccessor)。 アプリを返します。 } }
そして、それはスタートアップカテゴリに呼び出すことができます。
デフォルトでは、MVCプロジェクトに直接UseStaticHttpContextを呼び出す場合()することができます。
公共ボイド設定(IApplicationBuilderアプリ、IHostingEnvironment ENV、ILoggerFactory loggerFactory) { app.UseStaticHttpContext()。
HttpContextAccessorを注入せずにプロジェクトでは、この方法は、ConfigureServicesを呼び出す必要があります
services.AddHttpContextAccessor();
その後、別の場所HttpContext.Currentを使用することができます。
公共IActionResultインデックス() { VAR statichttpcontext = HttpContextDemo.HttpContext.Current。 ビューを返します(); }
ここに示されたそれはコントローラーで呼び出すことです、実際には、より多くのは、このようなミドルウェアや彼自身の執筆サービスの一部として他の場所で呼び出すことです。
実際には、コントローラが直接のHttpContext、ControllerBaseのHttpContextクラスは、プロパティを持って使用することができます。