Condividi tramite


ASP0028: prendere in considerazione l'uso IPAddress.IPv6Any invece di IPAddress.Any

Valore
ID regola ASP0028
Categoria Utilizzo
La correzione causa un'interruzione o meno Senza interruzioni

Causa

Nel computer server che supporta IPv6, IPv6Any è preferibile a Any perché Any può essere più lento di IPv6Any. In alcuni casi, Any potrebbe non funzionare affatto. Anypuò essere più lento a causa dell'implementazione dei tipi di sistema sottostanti.

127.0.0.1 è l'indirizzo di loopback IPv4. ::1 è l'indirizzo di loopback IPv6. Any è l'indirizzo con caratteri jolly per IPv4. IPv6Any è l'indirizzo universale per IPv6.

Comportamento corrente con IPv6 quando si usa HTTP/1.x o HTTP/2.0:

  • localhost viene risolto in [::1].
  • [::1] non viene accettata dal server, che forza un nuovo tentativo usando 127.0.0.1, creando un ciclo ripetuto.

L'uso Any con le condizioni precedenti causa il ASP0028 messaggio di diagnostica. Di seguito è riportato un esempio di codice che può comportare queste condizioni:

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

Descrizione regola

Il modo consigliato per configurare Kestrel per l'ascolto delle connessioni in ingresso in tutte le interfacce di rete disponibili IPv6 è con IPv6Any.

Come correggere le violazioni

Per il codice problematico, sostituire Any con IPv6Any.

Usare il ListenAnyIP(Int32) metodo senza specificare argomenti:

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

In alternativa, usare il IPv6Any campo :

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

Quando eliminare gli avvisi

Il ASP0028 diagnostico ha livello di gravità Informazioni. Eliminare questo avviso se l'intenzione è disabilitare IPv6 completamente l'utilizzo nel server, anche se in questo caso si rischia i problemi di prestazioni indicati in questo articolo.

IPv6 può essere disabilitato a livello di sistema o solo per .NET tramite l'opzione AppCtx o la variabile di ambiente