IActionContextAccessor 和 ActionContextAccessor 已被标记为过时,诊断标识符为 ASPDEPR006。 随着终结点路由的引入,不再需要IActionContextAccessor,因为开发人员可以直接通过HttpContext.GetEndpoint()访问动作描述符和元数据信息。
已引入的版本
.NET 10 预览版 7
以前的行为
以前,可以使用 IActionContextAccessor 访问当前 ActionContext。
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 开始,使用 IActionContextAccessor 并 ActionContextAccessor 生成带有诊断 ID ASPDEPR006的编译器警告:
警告ASPDEPR006:ActionContextAccessor 已过时,将在将来的版本中删除。 有关详细信息,请访问 https://aka.ms/aspnet/deprecate/006。
破坏性变更的类型
此更改可能会影响 源兼容性。
更改原因
在 ASP.NET Core 中引入终结点路由后, IActionContextAccessor 不再需要。 终结点路由基础结构提供了一种更简洁和直接的方式,通过 HttpContext.GetEndpoint() 访问终结点元数据,这与 ASP.NET Core 在终结点路由方向的体系结构演变保持一致。
建议的措施
从  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.
   }
}