共用方式為


IActionContextAccessor 和 ActionContextAccessor 已過時

IActionContextAccessorActionContextAccessor 已標示為過時,且診斷識別碼 ASPDEPR006為 。 隨著端點路由的引進, IActionContextAccessor 開發人員不再需要直接透過 HttpContext.GetEndpoint()存取動作描述元和元數據資訊。

推出的版本

.NET 10 Preview 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 開始,使用 IActionContextAccessorActionContextAccessor 產生具有診斷標識符 ASPDEPR006的編譯程式警告:

警告ASPDEPR006:ActionContextAccessor 已過時,未來版本將會移除。 如需詳細資訊,請瀏覽:https://aka.ms/aspnet/deprecate/006

破壞性變更的類型

這項變更可能會影響 來源相容性

變更的原因

在 ASP.NET Core 中引進端點路由時, IActionContextAccessor 已不再需要。 端點路由基礎結構提供更簡潔、更直接的方式,可透過 HttpContext.GetEndpoint()存取端點元數據,並配合 ASP.NET Core 架構向端點路由的演進。

從 移 IActionContextAccessorIHttpContextAccessor 並使用 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