Dela via


ASP0028: Överväg att använda IPAddress.IPv6Any i stället för IPAddress.Any

Värde
Regel-ID ASP0028
kategori Användning
Korrigeringen är brytande eller icke-brytande Ej brytande

Orsak

På serverdatorn som stöder IPv6föredras IPv6Any framför Any eftersom Any kan vara långsammare än IPv6Any. I vissa fall kanske Any inte fungerar alls. Any kan vara långsammare på grund av implementeringen av underliggande systemtyper.

127.0.0.1 är IPv4-loopback-adressen. ::1 är IPv6-loopback-adressen. Any är jokertecknets adress för IPv4. IPv6Any är jokertecknets adress för IPv6.

Aktuellt beteende med IPv6 när du använder HTTP/1.x eller HTTP/2.0:

  • localhost resulterar i [::1].
  • [::1] accepteras inte av servern, vilket tvingar fram ett nytt försök med 127.0.0.1, vilket skapar en upprepad cykel.

Om du använder Any med de föregående villkoren leder det till diagnostikmeddelandet ASP0028. Här är ett exempel på koden som kan resultera i följande villkor:

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

Regelbeskrivning

Det rekommenderade sättet för att konfigurera Kestrel så att det lyssnar på inkommande anslutningar på alla tillgängliga IPv6 nätverksgränssnitt är med IPv6Any.

Så här åtgärdar du överträdelser

För den problematiska koden ersätter du Any med IPv6Any.

Använd metoden ListenAnyIP(Int32) utan att ange några argument:

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

Eller använd fältet IPv6Any:

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

När du ska ignorera varningar

Diagnostiken för ASP0028 har allvarlighetsnivå: Information. Ignorera den här varningen om din avsikt är att inaktivera IPv6 användning helt på servern, även om det riskerar de prestandaproblem som nämns i den här artikeln.

IPv6 kan inaktiveras antingen systemomfattande eller endast för .NET via AppCtx-växeln eller miljövariabeln