Asp.Net Core現在のコンテキストオブジェクトの取得

4258 ワード

HttpContextの概要
.Net CoreのHttpContextコンテキストは抽象クラスであり、名前空間はMicrosoftである.AspNetCore.Http
プログラムセット

etstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll

定義コード:
namespace Microsoft.AspNetCore.Http
{
    //
    //   :
    //     Encapsulates all HTTP-specific information about an individual HTTP request.
    public abstract class HttpContext
    {
        protected HttpContext();

一、Mvcコントローラインスタンスにコンテキストオブジェクトを含む
        public IActionResult Index()
        {
            HttpContext _context = this.HttpContext;
            return View();
        }

二、静的なIServiceProviderを定義し、現在の要求コンテキストをグローバルに取得する
1.クラスの定義
    public class TestOne
    {
        public static IServiceProvider ServiceProvider;
        public static HttpContext GetContext()
        {
            object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));

            HttpContext context = ((IHttpContextAccessor)factory).HttpContext;

            return context;
        }
    }

2.プロファイルStartupで、
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider svp)
        {
            TestOne.ServiceProvider = svp;
.....
        }

3.他のどこでも使う
        public IActionResult Index()
        {
            HttpContext _context = this.HttpContext;
            if (_context == TestOne.GetContext())
                return Content("     ");
            return View();
        }

注意:
IHttpContextAccessorインタフェースは、デフォルトでは依存注入によってインスタンス管理されないためです.
まずServiceCollectionに登録します.そうしないと、IISがリリースされた後にfactoryインスタンスがnullになります.
public void ConfigureServices(IServiceCollection services)
{
    services.TryAddSingleton();

    // Other code...
}

 
詳細:
Asp.Net Coreビュー整理(一)
Asp.Net Core異常処理整理
.Net Coreプロファイル読み込み整理