首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Application Insights将HttpContext注入IHttpContextAccessor.Request的方向是什么?

Application Insights将HttpContext注入IHttpContextAccessor.Request的方向是什么?
EN

Stack Overflow用户
提问于 2019-04-23 08:56:04
回答 3查看 343关注 0票数 0

我目前使用的是最新的Unity容器,我使用的是asp.net Core2.2,我使用的是应用程序洞察力。因此,我已经在我的web应用程序中配置了DI,以使用unity而不是核心中的开箱即用的DI提供程序。我还使用应用程序洞察和使用IWebHostBuilder.UseApplicationInsights扩展来为我的应用程序启动AI。

考虑到所有这些,我有一段代码,它的构造函数接受IHttpContextAccessor,这样我就可以访问HttpContext了。然后,我有了另一个小应用程序,我试图重用这个功能,来自IHttpContextAccessor的HttpContext是空的。通过一系列猜测、测试和修改,我发现IWebHostBuilder.UseApplicationInsights似乎初始化了IHttpContextAccessor上的请求属性(HttpContext)。如果我注释掉那个AI扩展,我会得到null;取消注释,它起作用了。

我已经开始仔细查看AI代码,以找出它们到底在做什么,但老实说,考虑到所有的依赖和管道以及所有这些,这是一项相当令人生畏的任务。所有的帮助都将是令人难以置信的。

EN

回答 3

Stack Overflow用户

发布于 2019-04-23 12:23:25

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

代码语言:javascript
复制
services.AddHttpContextAccessor();
票数 0
EN

Stack Overflow用户

发布于 2019-04-23 20:11:46

经过一番努力,希望这篇文章能启发我对AI ask的理解,我发现我不需要复制AI机制,如果真的有的话。

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

一定有什么地方我遗漏了,但我让代码正常工作,所以我很高兴。如果有人能阐明为什么一种方式比另一种方式有效,我会很高兴听到的。

票数 0
EN

Stack Overflow用户

发布于 2019-04-26 04:28:34

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

这就是发生这种情况的确切行:https://github.com/Microsoft/ApplicationInsights-aspnetcore/blob/develop/src/Microsoft.ApplicationInsights.AspNetCore/Extensions/ApplicationInsightsExtensions.cs#L137

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55802891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档