Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
IActionContextAccessor e ActionContextAccessor foram marcados como obsoletos com ID ASPDEPR006de diagnóstico . Com a introdução do roteamento de pontos finais, não é mais necessário, IActionContextAccessor pois os desenvolvedores podem acessar informações sobre descritores de ações e metadados diretamente através HttpContext.GetEndpoint()do .
Versão introduzida
.NET 10 Prévia 7
Comportamento anterior
Anteriormente, você podia 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
A partir do .NET 10, usando IActionContextAccessor e ActionContextAccessor produzindo um aviso do compilador com ID ASPDEPR006de diagnóstico:
aviso ASPDEPR006: ActionContextAccessor está obsoleto e será removido em uma versão futura. Para mais informações, visite https://aka.ms/aspnet/deprecate/006.
Tipo de mudança disruptiva
Essa alteração pode afetar compatibilidade da fonte.
Motivo da mudança
Com a introdução do roteamento de ponto final 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 por meio HttpContext.GetEndpoint()do , alinhando-se com a evolução arquitetônica do ASP.NET Core em direção ao roteamento de pontos finais.
Ação recomendada
Migrar de IActionContextAccessor e IHttpContextAccessor 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.
}
}