Compartilhar via


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

Valor
ID da regra ASP0028
Categoria Uso
Correção interruptiva ou sem interrupção Sem interrupção

Causa

Na máquina servidor que oferece suporte IPv6a , IPv6Any é preferível a Any porque Any pode ser mais lento que IPv6Any. Em alguns casos, Any pode não funcionar. Anypode ser mais lento devido à implementação subjacente dos tipos de sistema.

127.0.0.1 é o endereço de loopback IPv4. ::1 é o endereço de loopback IPv6. 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 para [::1].
  • [::1] não é aceito pelo servidor, o que força uma nova tentativa usando 127.0.0.1, criando um ciclo repetido.

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

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

Descrição da regra

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

Como corrigir violações

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

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

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

Ou use o IPv6Any campo:

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

Quando suprimir avisos

O ASP0028 diagnóstico tem gravidade do nível de informação . Suprima esse aviso se sua intenção for desabilitar IPv6 completamente o uso no servidor, embora isso arrisque os problemas de desempenho mencionados neste artigo.

IPv6 pode ser desabilitado em todo o sistema ou apenas para .NET por meio da opção AppCtx ou da variável de ambiente