Partager via


IActionContextAccessor et ActionContextAccessor sont obsolètes

IActionContextAccessor et ActionContextAccessor ont été marqués comme obsolètes avec l’ID ASPDEPR006de diagnostic . Avec l’introduction du routage des points de terminaison, il n’est plus nécessaire d'utiliser IActionContextAccessor, car les développeurs peuvent accéder directement aux informations de descripteur d'actions et de métadonnées via HttpContext.GetEndpoint().

Version introduite

.NET 10 Preview 7

Comportement précédent

Auparavant, vous pouviez utiliser IActionContextAccessor pour accéder au ActionContext actuel :

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.
   }
}

Nouveau comportement

À compter de .NET 10, l'utilisation de IActionContextAccessor et ActionContextAccessor entraîne un avertissement du compilateur avec l’ID de diagnostic ASPDEPR006.

avertissement ASPDEPR006 : ActionContextAccessor est obsolète et sera supprimé dans une version ultérieure. Pour plus d’informations, consultezhttps://aka.ms/aspnet/deprecate/006.

Type de changement cassant

Cette modification peut affecter la compatibilité source .

Raison de la modification

Avec l’introduction du routage de point de terminaison dans ASP.NET Core, IActionContextAccessor n'est plus nécessaire. L’infrastructure de routage des points de terminaison offre un moyen plus simple et plus direct d’accéder aux métadonnées de point de terminaison via HttpContext.GetEndpoint(), en s’alignant sur l’évolution architecturale de ASP.NET Core vers le routage des points de terminaison.

Migrer vers IActionContextAccessorIHttpContextAccessor et utiliser HttpContext.GetEndpoint():

Avant:

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
   }
}

Après :

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 affectées