Partilhar via


ASP0028: Considere usar IPAddress.IPv6Any em vez de IPAddress.Any

Valor
Código da regra ASP0028
Categoria Utilização
O ajuste está a dar problemas ou está a funcionar Sem quebra

Causa

Na máquina servidor que suporta IPv6, , IPv6Any é preferido a Any porque Any pode ser mais lento do que IPv6Any. Em alguns casos, Any pode não funcionar de todo. Any pode ser mais lento devido à implementação subjacente de tipos de sistema.

127.0.0.1 é o endereço de loopback do IPv4. O endereço de loopback do IPv6 (Internet Protocol versão 6) é ::1. Any é o endereço curinga para IPv4. IPv6Any é o endereço curinga para IPv6.

Comportamento atual com IPv6 ao usar HTTP/1.x ou HTTP/2.0:

  • localhost resolve-se em [::1].
  • [::1] não é aceito pelo servidor, o que força uma nova tentativa usando 127.0.0.1, criando um ciclo repetido.

Usar Any com as condições anteriores provoca a mensagem de diagnóstico ASP0028. Aqui está um exemplo do código que pode resultar nessas condições:

.UseKestrel().ConfigureKestrel(options =>
{ 
    options.Listen(IPAddress.Any, ...);
})

Descrição da regra

A maneira recomendada de configurar Kestrel para escutar conexões de entrada em todas as interfaces de rede IPv6 disponíveis é com IPv6Any.

Como corrigir violações

Para o código problemático, substitua Any por IPv6Any.

Use o método ListenAnyIP(Int32) sem especificar nenhum argumento:

.UseKestrel().ConfigureKestrel(options =>
{ 
-   options.Listen(IPAddress.Any, ...);
+   options.ListenAnyIP(...);
})

Ou use o campo IPv6Any:

.UseKestrel().ConfigureKestrel(options =>
{ 
-   options.Listen(IPAddress.Any, ...);
+   options.Listen(IPAddress.IPv6Any, ...);
})

Quando suprimir avisos

O diagnóstico ASP0028 tem severidade de nível de informação . Suprima este aviso se a sua intenção for desabilitar completamente o uso do IPv6 no servidor, embora isso implique o risco dos problemas de desempenho mencionados neste artigo.

IPv6 pode ser desabilitado em todo o sistema ou para .NET somente por meio do switch AppCtx ou da variável de ambiente