我开始将我的asp.net核心RC1项目转换为RC2,并面临ihttpcontextaccessor现在没有解决的问题。

为了简单起见,我创建了新的ASP。asp.net RC2项目使用Visual Studio模板ASP。NET核心Web应用程序(。净框架)。然后我为HomeController添加了构造函数,该模板为我创建。

public HomeController(IHttpContextAccessor accessor)
{
}

在我启动应用程序后,我收到下一个错误:

无法解析类型为“Microsoft.AspNetCore.Http”的服务。IHttpContextAccessor',而试图激活'TestNewCore.Controllers.HomeController'。 вMicrosoft.Extensions.Internal.ActivatorUtilities。GetService(IServiceProvider sp,类型类型,类型requiredBy,布尔值isDefaultParameterRequired)

在我的实际应用程序中,我需要在我自己的服务类中解析IHttpContextAccessor以访问_contextAccessor.HttpContext。身份验证和_contextAccessor.HttpContext.User。在RC1中一切正常。那么它怎么可能在RC2中呢?


当前回答

对于。net Core 6.0,在Program.cs类中添加以下代码:

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 

其他回答

默认情况下IHttpContextAccessor不再连接,您必须自己注册它

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

在. net Core 2.1中,已经添加了一个扩展方法来正确地将IHttpContextAccessor注册为单例对象。请参见添加helper来注册IHttpContextAccessor #947。只需在ConfigureServices()方法中添加如下内容:

services.AddHttpContextAccessor();

这相当于:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

对于。net Core 6.0,在Program.cs类中添加以下代码:

builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 
services.AddScoped(sp => sp.GetService<IHttpContextAccessor>().HttpContext.Session);