Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
IActionContextAccessor e ActionContextAccessor foram marcados como obsoletos com a ID de diagnóstico ASPDEPR006. Com a introdução do roteamento de ponto de extremidade, IActionContextAccessor não é mais necessário, pois os desenvolvedores podem acessar informações de descritor de ação e metadados diretamente por meio HttpContext.GetEndpoint().
Versão introduzida
.NET 10 Versão Prévia 7
Comportamento anterior
Anteriormente, você poderia usar IActionContextAccessor para acessar o atual 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.
}
}
Novo comportamento
Começando no .NET 10, usando IActionContextAccessor e ActionContextAccessor produz um aviso do compilador com a ID ASPDEPR006 de diagnóstico:
aviso ASPDEPR006: ActionContextAccessor está obsoleto e será removido em uma versão futura. Para obter mais informações, visitehttps://aka.ms/aspnet/deprecate/006.
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade da origem.
Motivo da alteração
Com a introdução do roteamento de ponto de extremidade no ASP.NET Core, IActionContextAccessor não é mais necessário. A infraestrutura de roteamento de ponto de extremidade fornece uma maneira mais limpa e direta de acessar metadados de ponto de extremidade, HttpContext.GetEndpoint()alinhando-se com a evolução arquitetônica do ASP.NET Core em direção ao roteamento de ponto de extremidade.
Ação recomendada
Migrar de IActionContextAccessor para IHttpContextAccessor e usar HttpContext.GetEndpoint():
Antes:
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
}
}
Depois:
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.
}
}