다음을 통해 공유


IActionContextAccessor 및 ActionContextAccessor는 사용되지 않습니다.

IActionContextAccessor 진단 ActionContextAccessor ID ASPDEPR006로 사용되지 않는 것으로 표시되었습니다. 엔드포인트 라우팅 IActionContextAccessor 이 도입되면서 개발자가 작업 설명자 및 메타데이터 정보에 직접 HttpContext.GetEndpoint()액세스할 수 있으므로 더 이상 필요하지 않습니다.

도입된 버전

.NET 10 미리 보기 7

이전 동작

이전에는 현재ActionContext에 액세스하는 데 사용할 IActionContextAccessor 수 있습니다.

public class MyService
{
   private readonly IActionContextAccessor _actionContextAccessor;

   public MyService(IActionContextAccessor actionContextAccessor)
   {
       _actionContextAccessor = actionContextAccessor;
   }

   public void DoSomething()
   {
       var actionContext = _actionContextAccessor.ActionContext;
       var actionDescriptor = actionContext?.ActionDescriptor;
       // Use action descriptor metadata.
   }
}

새 동작

.NET 10부터 진단 IDASPDEPR006가 있는 컴파일러 경고를 사용하고 IActionContextAccessorActionContextAccessor 생성합니다.

경고 ASPDEPR006: ActionContextAccessor는 사용되지 않으며 이후 버전에서 제거됩니다. 자세한 내용은 https://aka.ms/aspnet/deprecate/006을 참조하세요.

파괴적 변경 유형

이 변경 사항은 소스 호환성에 영향을 줄 수 있습니다.

변경 이유

ASP.NET Core IActionContextAccessor 에서 엔드포인트 라우팅이 도입되면 더 이상 필요하지 않습니다. 엔드포인트 라우팅 인프라는 엔드포인트 라우팅을 향한 ASP.NET Core의 아키텍처 발전에 맞춰 엔드포인트 메타데이터 HttpContext.GetEndpoint()에 더 명확하고 직접적인 액세스를 제공합니다.

다음으로 IActionContextAccessor 마이그레이션하고 다음을 IHttpContextAccessor 사용합니다 HttpContext.GetEndpoint().

전에:

public class MyService
{
   private readonly IActionContextAccessor _actionContextAccessor;

   public MyService(IActionContextAccessor actionContextAccessor)
   {
       _actionContextAccessor = actionContextAccessor;
   }

   public void DoSomething()
   {
       var actionContext = _actionContextAccessor.ActionContext;
       var actionDescriptor = actionContext?.ActionDescriptor;
       // Use action descriptor metadata
   }
}

이후:

public class MyService
{
   private readonly IHttpContextAccessor _httpContextAccessor;

   public MyService(IHttpContextAccessor httpContextAccessor)
   {
       _httpContextAccessor = httpContextAccessor;
   }

   public void DoSomething()
   {
       var httpContext = _httpContextAccessor.HttpContext;
       var endpoint = httpContext?.GetEndpoint();
       var actionDescriptor = endpoint?.Metadata.GetMetadata<ActionDescriptor>();
       // Use action descriptor metadata.
   }
}

영향을 받는 API