Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
IActionContextAccessor a ActionContextAccessor byly označeny jako zastaralé pod diagnostickým ID ASPDEPR006. Se zavedením směrování koncových bodů už IActionContextAccessor není nutné, protože vývojáři mohou přistupovat k popisovači akcí a informacím o metadatech přímo prostřednictvím HttpContext.GetEndpoint().
Verze byla představena
.NET 10 Preview 7
Předchozí chování
Dříve jste mohli použít IActionContextAccessor k přístupu k aktuálnímu 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.
}
}
Nové chování
Od verze .NET 10 použití IActionContextAccessor a ActionContextAccessor vygeneruje upozornění kompilátoru s diagnostickým ID ASPDEPR006:
upozornění ASPDEPR006: ActionContextAccessor je zastaralý a bude odebrán v budoucí verzi. Další informace najdete na adrese https://aka.ms/aspnet/deprecate/006.
Typ zásadní změny
Tato změna může ovlivnit kompatibilitu zdroje.
Důvod změny
Se zavedením směrování koncových bodů v ASP.NET Core IActionContextAccessor už není potřeba. Infrastruktura směrování koncového bodu poskytuje čistší a přímější způsob přístupu k metadatům koncových bodů prostřednictvím HttpContext.GetEndpoint(), což je v souladu s vývojem architektury ASP.NET Core směrem ke směrování koncových bodů.
Doporučená akce
Migrace z IActionContextAccessor na IHttpContextAccessor a použití HttpContext.GetEndpoint()
Před:
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
}
}
Po:
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.
}
}