Application Insights在哪里将HttpContext注入IHttpContextAccessor.Request?

问题描述 投票:0回答:3

我发现自己处于一个有趣的位置。我目前使用最新的Unity容器,我在asp.net核心2.2上,我使用应用程序洞察。因此,我在我的网络应用程序中配置了DI,使用unity而不是核心的开箱即用DI提供程序。我还使用Application Insights并使用IWebHostBuilder.UseApplicationInsights扩展来为我的应用程序启动AI。

考虑到所有这些,我有一段代码,其构造函数接受IHttpContextAccessor,因此我可以访问HttpContext。它工作得很好。然后,我有另一个小应用程序,我试图重用该功能,并且来自IHttpContextAccessor的HttpContext为null。通过一堆猜测,测试,修改,我发现IWebHostBuilder.UseApplicationInsights似乎在IHttpContextAccessor上初始化了Request属性(HttpContext)。如果我注释掉AI扩展,我会得到null;取消注释,它有效。

我已经开始查看AI代码以确定它们究竟在做什么,但老实说,所有依赖项和管道以及所有这些,这是一项非常艰巨的任务。我希望有人可以指出AI在哪里/如何做这个,所以我的代码不需要AI才能工作。所有的帮助都会非常棒。

azure asp.net-core unity-container azure-application-insights
3个回答
0
投票

使用AddHttpContextAccessor扩展将其添加到DI。由于性能影响,默认情况下不会添加HttpContextAccessor。

services.AddHttpContextAccessor();

0
投票

经过一番挣扎,并希望这篇文章能够启发我对AI的要求,我发现我不需要复制AI机制,如果有甚至一个。

最初,我通过视图中的代码(Razor)访问IHttpContextAccessor。我有一个抽象的工厂模式,我用来通过Unity实例化IHttpContextAccessor(这个模式来自我的.Net Frame工作日)。一旦我将代码移回控制器并使用正确的.net核心DI通过构造函数获得依赖,一切都开始工作。

必须有一些我缺少的东西,但我的代码正常工作,所以我很高兴。如果有人能说明为什么一种方式与另一种方式有效,我会很高兴听到它。


0
投票

通过调用.UseApplicationInsights()启用应用程序洞察时,它会添加HttpContextAccessor。 ApplicationInsights中有许多组件需要注入HttpContextAccessor。例如:ClientIpHeaderTelemetryInitializer。

这是发生这种情况的确切线:qazxsw poi

© www.soinside.com 2019 - 2024. All rights reserved.