正しい姿勢のHttpContextアクセス

します。https://www.cnblogs.com/tianqing/p/12570801.htmlこの記事はから転送されます

特定のシナリオのHttpContextの使用:

1.アクセスコントローラ層のHttpContext

2.ミドルウェアのHttpContext

データアクセス層3.のHttpContext

4.アクセスのHttpContextバックグラウンドスレッドで

モデル5.アクセスのHttpContextカミソリページ

ビュー6.カミソリアクセスするHttpContext

ソリューション

1. アクセスコントローラ層でのHttpContext

   サンプルコードにHomeController抽象クラス継承とコントローラ

   コントローラControllerBase親クラスの継承と抽象クラス

   HttpContextへのアクセスを提供してきたControllerBase抽象クラス

  

  そこで、我々は、この層コントローラでは、次のようにしているHttpContextにアクセスすることができます。

パブリッククラスにHomeController:コントローラ
  { 
        プライベート読み取り専用ILoggerです<にHomeController> _logger。
        プライベート文字列の顧客。

        公的にHomeController(ILoggerです<にHomeController>ロガー)
        { 
            _logger =ロガー。
            
            顧客= HttpContext.Request.Form [ "のCustomerId"]; 
        } 
}

 2:ミドルウェアで使用するHttpContext

    カスタム拡張ミドルウェア、実現Invokeメソッドは、パラメータを経由してのHttpContextミドルウェアサービスロジックに送信されます。

 公共の非同期タスクの起動(のHttpContextコンテキスト)

 

パブリック クラスCustomerMiddleware 
{ 
        プライベート 読み取り専用RequestDelegate _next。

        公共CustomerMiddleware(RequestDelegate次)
        { 
            _next = 次回。
        } 

        公共の 非同期タスクを呼び出します(のHttpContextコンテキスト)
        { 
            // リクエスト処理の開始近くのコンテキストで実行(Do)何か。                     
            await _next.Invoke(コンテキスト)。

            // クリーンアップ。
        } 
}

第三に、 データアクセス層を使用するHttpContext

 ユーザーのストレージは、ユーザーの永続性を実現するためのクラスを宣言する。次のコードでは、

頼るUserRepository IHttpContextAccessorを

依存関係が注入容器鎖によって分離し、UserRepository依存ASP.NETコア・インスタンスを作成している場合は、依存関係を注入します。

パブリック クラスUserRepository:IUserRepository 
    { 
        プライベート 読み取り専用IHttpContextAccessor _httpContextAccessor。

        公共UserRepository(IHttpContextAccessor httpContextAccessor)
        { 
            _httpContextAccessor = httpContextAccessor。
        } 

        公共 ボイドは、AddUser(ユーザユーザ)
        { 
            VAR名= _httpContextAccessor.HttpContext.User.Identity.Name。
            
            // DBに保存ユーザー
        } 
    }

組み込みのASP.NETコア使用依存性注入コンテナを依存関係を登録します。任意のクラスを提供するために、依存性注入コンテナ  IHttpContextAccessorをどの彼らの宣言依存性クラスのコンストラクタで使用するために、:

公共 のボイドConfigureServices(IServiceCollectionサービス)
{ 
            services.AddControllersWithViews(); 

            services.AddHttpContextAccessor(); 
            services.AddTransient <IUserRepository、UserRepository> (); 
}

4:アクセスのHttpContextバックグラウンドスレッドで

 HttpContextは、スレッドセーフではありません。読み取りまたは書き込みの外側のHttpContext要求属性を処理するとNullReferenceExceptionヌル参照例外が発生することがあります。

 HttpContextを使用してバックグラウンドスレッドをどのようにしてするのですか?お勧め:

  1コピーの所望のデータ処理を要求します。

  2.バックグラウンドタスクにデータをコピーします。

  

5:モデルでのアクセスのHttpContextカミソリページ

親PageModelカミソリのHttpContextページモデルは、次のコードへのアクセスを提供します。

第六に、カミソリビューでアクセスするHttpContext

   ビューを介してカミソリビュー  RazorPage.Contextの  特性は、直接のHttpContext開示さ

{@ 
    ViewDataを[ "タイトル"] = "ホームページ"; 
    VARのユーザー名= コンテキスト .User.Identity.Name。
}

おすすめ

転載: www.cnblogs.com/ITzhangyunpeng/p/12597605.html