2017-12-11 18 views
0

私はILog logフィールドを持つベースコントローラクラスを持っています。これは、カスタムロガーサービスからのコンストラクタで設定され、依存関係注入によって渡されました。ASP.NETコアコントローラのコンストラクタ:アクセス要求情報

私は、任意のHTTPヘッダーまたはHttpContext.Itemsや私logを作成するときに、それを使用するにはそのような何かを得るために、コントローラのコンストラクタに要求コンテキストのようなものを利用したいと思います。

IHttpContextAccessorを使ってみました。ミドルウェアによって追加されたItemsが含まれていないDefaultHttpContextが表示されます。

コントローラのlogプロパティをにして、このプロパティを設定するIActionFilterを書くことが私には想像できます。アクションフィルタはコンテキストインスタンスとコントローラインスタンスの両方にアクセスできるためです。

コントローラーコンストラクターで要求コンテキストがないのは、要求情報がアクションの定型コードを回避するのに役立つため、私には奇妙に見えます。コントローラはリクエストごとに作成されるため、コンストラクタでリクエストデータを使用することは害です。

答えて

0

リクエストレベルのログには、ActionFilter attrbuteを使用して、​​を挿入します。私は確信していませんが、MVC 5+では、依存関係注入がアクションフィルタ属性でサポートされていると思います。そうでない場合は、GlobalFiltersに登録する代わりに、IFilterProviderを実装して、その属性をリクエストに添付してインスタンス化することができます。

一方、何らかのビジネスレベルのログが必要な場合(たとえば、アクション本体内など)、注入された​​をコントローラに使用しますが、プロセスが内部に入るまではロギングロジックを呼び出さないでください行動。その時点で、既にビルドされたリクエストコンテキストがあります。

関連する問題