Sdílet prostřednictvím


ASP0028: Zvažte použití IPAddress.IPv6Any místo IPAddress.Any

Hodnota
ID pravidla ASP0028
Kategorie Využití
Oprava je kritická nebo nekritická Nenarušující

Příčina

Na serverovém počítači, který podporuje IPv6, je IPv6Any upřednostňován před pro jakékoli použití, protože Any může být pomalejší než IPv6Any. V některých případech Any nemusí vůbec fungovat. Anymůže být pomalejší kvůli implementaci základních typů systému.

127.0.0.1 je adresa zpětné smyčky IPv4. ::1 je adresa zpětné smyčky IPv6. Any je zástupný znak pro protokol IPv4. IPv6Any je zástupný znak pro protokol IPv6.

Aktuální chování s protokolem IPv6 při použití protokolu HTTP/1.x nebo HTTP/2.0:

  • localhost se vyhodnotí jako [::1].
  • [::1] server nepřijímá, což vynutí opakování použití 127.0.0.1, vytvoření opakovaného cyklu.

Použití Any s předchozími podmínkami způsobí diagnostickou ASP0028 zprávu. Tady je příklad kódu, který může vést k těmto podmínkám:

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

Popis pravidla

Doporučený způsob konfigurace Kestrel tak, aby naslouchal pro příchozí připojení na všech dostupných síťových rozhraních IPv6, je s IPv6Any.

Jak opravit porušení

Pro problematický kód nahraďte Any znakem IPv6Any.

Použijte metodu ListenAnyIP(Int32) bez zadání argumentů:

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

Nebo použijte IPv6Any pole:

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

Kdy potlačit upozornění

Diagnostika ASP0028závažnost úrovně informací . Potlačte toto upozornění, pokud vaším záměrem je úplné zakázání používání IPv6 na serveru, i když tím riskujete problémy s výkonem, které jsou zmíněné v tomto článku.

IPv6 je možné zakázat buď na systémové úrovni, nebo pouze pro .NET prostřednictvím přepínače AppCtx nebo proměnné prostředí