Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
IActionContextAccessor i ActionContextAccessor zostały oznaczone jako przestarzałe z diagnostycznym identyfikatorem ASPDEPR006. Dzięki wprowadzeniu routingu punktów końcowych, IActionContextAccessor nie jest już konieczny, ponieważ deweloperzy mogą uzyskiwać dostęp do deskryptora akcji i informacji o metadanych bezpośrednio za pośrednictwem HttpContext.GetEndpoint().
Wersja wprowadzona
.NET 10 (wersja zapoznawcza 7)
Poprzednie zachowanie
Wcześniej można było użyć IActionContextAccessor, aby uzyskać dostęp do bieżącego ActionContext elementu.
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.
}
}
Nowe zachowanie
Począwszy od platformy .NET 10, przy użyciu IActionContextAccessor i ActionContextAccessor powoduje ostrzeżenie kompilatora z identyfikatorem diagnostycznym ASPDEPR006.
ostrzeżenie ASPDEPR006: Element ActionContextAccessor jest przestarzały i zostanie usunięty w przyszłej wersji. Aby uzyskać więcej informacji, zobacz https://aka.ms/aspnet/deprecate/006.
Typ zmiany przełamującej
Ta zmiana może mieć wpływ na zgodność źródła .
Przyczyna zmiany
Wraz z wprowadzeniem routingu punktów końcowych w ASP.NET Core IActionContextAccessor nie jest już konieczne. Infrastruktura routingu punktów końcowych zapewnia bardziej przejrzysty, bardziej bezpośredni sposób uzyskiwania dostępu do metadanych punktu końcowego za pośrednictwem metody HttpContext.GetEndpoint(), dostosowując się do ewolucji architektury ASP.NET Core w kierunku routingu punktów końcowych.
Zalecana akcja
Przeprowadź migrację z IActionContextAccessor do IHttpContextAccessor i użyj polecenia HttpContext.GetEndpoint():
Przed:
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.
}
}