InvalidOperationException : 'Microsoft.AspNetCore.Http.IHttpContextAccessor'유형의 서비스를 확인할 수 없습니다.


137

내 asp.net 코어 RC1 프로젝트를 RC2로 변환하기 시작했고 이제는 IHttpContextAccessor해결되지 않는 문제에 직면했습니다 .

간단하게하기 위해 Visual Studio Template을 사용하여 새로운 ASP.NET RC2 프로젝트를 만들었습니다 ASP.NET Core Web Application (.Net Framework). 템플릿이 만든 HomeController의 생성자를 추가 한 것보다.

public HomeController(IHttpContextAccessor accessor)
{
}

응용 프로그램을 시작한 후 다음 오류가 발생합니다.

InvalidOperationException : 'TestNewCore.Controllers.HomeController'를 활성화하는 동안 'Microsoft.AspNetCore.Http.IHttpContextAccessor'유형의 서비스를 확인할 수 없습니다. ◦ Microsoft.Extensions.Internal.ActivatorUtilities.GetService (IServiceProvider sp, 유형 유형, 유형 requiredBy, 부울 isDefaultParameterRequired)

실제 응용 프로그램 IHttpContextAccessor에서 _contextAccessor.HttpContext.Authentication와에 액세스하려면 내 서비스 클래스에서 해결해야 합니다 _contextAccessor.HttpContext.User. Everething은 RC1에서 잘 작동합니다. 그렇다면 어떻게 RC2에 있다고 가정 할 수 있습니까?


이 문제는 aspnet GitHub 저장소에서 논의되었습니다 : github.com/aspnet/Hosting/issues/793
Chris Pickford

답변:


217

IHttpContextAccessor는 더 이상 기본적으로 연결되어 있지 않으므로 직접 등록해야합니다.

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

7
작동합니다. services.AddScoped<IActionContextAccessor, ActionContextAccessor>()
YuriyP

6
적절한 범위가 무엇인지에 대한 공식 권장 사항이 있습니까? 그것은이어야한다 Singleton, Scoped또는 Transient?
Mark Vincze

9
아 여기에서 논의되었으며 여러 사람들이 안전하게 할 수 있는지 확인합니다 Singleton. github.com/aspnet/Hosting/issues/793
Mark Vincze

그렇게 할 때이 오류가 발생했습니다 InvalidOperationException: Cannot consume scoped service. 어떤 아이디어?
Robouste

1
services.AddHttpContextAccessor()Microsoft가 선호하거나 권장하는 제공된 확장 방법 을 사용하는 방법에 대한 다음 답변을 참조하십시오 .
마틴 블리스

120

.NET Core 2.1 IHttpContextAccessor부터는 싱글 톤으로 올바르게 등록하기 위해 추가 된 확장 방법이 있습니다 . IHttpContextAccessor # 947 등록을 위해 헬퍼 추가를 참조 하십시오 . ConfigureServices()방법에 다음과 같이 간단히 추가하십시오 .

services.AddHttpContextAccessor();

이것은 다음과 같습니다.

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.