InvalidOperationException:无法解析“Microsoft.AspNetCore.Http.IHttpContextAccessor”类型的服务
Posted
技术标签:
【中文标题】InvalidOperationException:无法解析“Microsoft.AspNetCore.Http.IHttpContextAccessor”类型的服务【英文标题】:InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' 【发布时间】:2016-09-19 04:04:14 【问题描述】:我开始将我的 asp.net core RC1 项目转换为 RC2,遇到了现在IHttpContextAccessor
没有解决的问题。
为了简单起见,我使用 Visual Studio 模板 ASP.NET Core Web Application (.Net Framework)
创建了新的 ASP.NET RC2 项目。比我为 HomeController 添加了为我创建的模板的构造函数。
public HomeController(IHttpContextAccessor accessor)
在我启动应用程序后,我收到下一个错误:
InvalidOperationException:尝试激活“TestNewCore.Controllers.HomeController”时无法解析“Microsoft.AspNetCore.Http.IHttpContextAccessor”类型的服务。 в Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
在我的实际应用程序中,我需要在我自己的服务类中解析IHttpContextAccessor
,才能访问_contextAccessor.HttpContext.Authentication
和_contextAccessor.HttpContext.User
。 Everthing 在 RC1 中运行良好。那么它怎么会出现在 RC2 中呢?
【问题讨论】:
此问题已在此处的 aspnet GitHub 存储库中进行了讨论:github.com/aspnet/Hosting/issues/793 【参考方案1】:IHttpContextAccessor默认不再绑定,需要自己注册
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
【讨论】:
成功了。services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
也有同样的故事
我们是否有关于适当范围的官方建议?应该是Singleton
、Scoped
还是Transient
?
啊,这里已经讨论过了,多人验证它可以安全地成为Singleton
。 github.com/aspnet/Hosting/issues/793
执行此操作时,我收到此错误:InvalidOperationException: Cannot consume scoped service
。有什么想法吗?
请参阅下一个关于使用 Microsoft 首选/推荐的扩展方法 services.AddHttpContextAccessor()
的答案。【参考方案2】:
从 .NET Core 2.1 开始,添加了一个扩展方法,可以将 IHttpContextAccessor
正确注册为单例。见Add helper to register IHttpContextAccessor #947。只需在您的ConfigureServices()
方法中添加如下内容:
services.AddHttpContextAccessor();
这相当于:
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
【讨论】:
【参考方案3】:services.AddScoped(sp => sp.GetService<IHttpContextAccessor>().HttpContext.Session);
【讨论】:
虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。以上是关于InvalidOperationException:无法解析“Microsoft.AspNetCore.Http.IHttpContextAccessor”类型的服务的主要内容,如果未能解决你的问题,请参考以下文章
InvalidOperationException:未找到名为“Bearer”的 AuthorizationPolicy
为啥这个 OdbcConnection 会抛出 System.InvalidOperationException?
System.InvalidOperationException: '绑定实例已经被关联到监听
使用 PerformanceCounters 时获取 InvalidOperationException [关闭]