ASP.NET Core-HttpContextの使い方
3006 ワード
ASP.NET CoreでHttpContextをどのように使うか、具体的にASP.NET Core HttpContext.
ASP.NET CoreにはIHttpContextAccessorインタフェースが用意されており、HttpContextAccessorのデフォルトでは、HttpContextへのアクセスが簡素化されています.
プログラムの起動時にIServicesCollectionに登録する必要があります.これにより、プログラムでHttpContextAccessorを取得し、HttpContextにアクセスできます.
次に実際に操作を行い、HttpContextAccessorを取得します.
HomeControllerに次のコードを追加します.
これによりHttpContextを取得できます.HttpContextAccessorを取得するには、プログラムの起動時に注入する必要があります.
みんなASP.NETではHttpContextを大量に使用する.CurrentはHttpContextを取得し、現在ASP.NET Coreはもうそうしません.
でも静的なHttpContextを使いたいならCurrentは、古いプログラムを移行するコストを削減することができます.
静的HttpContextクラスを新規作成
次に拡張クラスを追加します.
次にStartupクラスで呼び出すことができます.
デフォルトでは、MVCプロジェクトでUseStaticHttpContext()を直接呼び出すとよい.
HttpContextAccessorが注入されていないプロジェクトでは、ConfigureServicesメソッドで呼び出す必要があります.
他の場所でHttpContextを使うことができますCurrent.
ここではControllerで呼び出すことを示しますが、ミドルウェアや自分で書いたサービスなど、他の場所で呼び出すことが多いです.
Controllerでは、HttpContextを直接使用できます.ControllerBaseクラスにはHttpContextプロパティがあります.
注入HttpContextAccessor
ASP.NET CoreにはIHttpContextAccessorインタフェースが用意されており、HttpContextAccessorのデフォルトでは、HttpContextへのアクセスが簡素化されています.
プログラムの起動時にIServicesCollectionに登録する必要があります.これにより、プログラムでHttpContextAccessorを取得し、HttpContextにアクセスできます.
services.AddSingleton();
HttpContextAccessorの取得
次に実際に操作を行い、HttpContextAccessorを取得します.
HomeControllerに次のコードを追加します.
public class HomeController : Controller
{
private IHttpContextAccessor _accessor;
public HomeController(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
public IActionResult Index()
{
var httpcontext = _accessor.HttpContext;
return View();
}
}
これによりHttpContextを取得できます.HttpContextAccessorを取得するには、プログラムの起動時に注入する必要があります.
HttpContextを実現する.Current
みんなASP.NETではHttpContextを大量に使用する.CurrentはHttpContextを取得し、現在ASP.NET Coreはもうそうしません.
でも静的なHttpContextを使いたいならCurrentは、古いプログラムを移行するコストを削減することができます.
静的HttpContextクラスを新規作成
public static class HttpContext
{
private static IHttpContextAccessor _accessor;
public static Microsoft.AspNetCore.Http.HttpContext Current => _accessor.HttpContext;
internal static void Configure(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
}
次に拡張クラスを追加します.
public static class StaticHttpContextExtensions
{
public static void AddHttpContextAccessor(this IServiceCollection services)
{
services.AddSingleton();
}
public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
{
var httpContextAccessor = app.ApplicationServices.GetRequiredService();
HttpContext.Configure(httpContextAccessor);
return app;
}
}
次にStartupクラスで呼び出すことができます.
デフォルトでは、MVCプロジェクトでUseStaticHttpContext()を直接呼び出すとよい.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseStaticHttpContext();
HttpContextAccessorが注入されていないプロジェクトでは、ConfigureServicesメソッドで呼び出す必要があります.
services.AddHttpContextAccessor();
他の場所でHttpContextを使うことができますCurrent.
public IActionResult Index()
{
var statichttpcontext = HttpContextDemo.HttpContext.Current;
return View();
}
ここではControllerで呼び出すことを示しますが、ミドルウェアや自分で書いたサービスなど、他の場所で呼び出すことが多いです.
Controllerでは、HttpContextを直接使用できます.ControllerBaseクラスにはHttpContextプロパティがあります.