次の方法で共有


ASP0028: 代わりに IPAddress.IPv6Any を使用することを検討してください IPAddress.Any

ルール ID ASP0028
カテゴリ 使用法
修正が中断ありか中断なしか なし

原因

IPv6をサポートするサーバー コンピューターでは、IPv6AnyAnyAnyIPv6Anyよりも遅くなる可能性があるため、推奨されます。 場合によっては、 Any がまったく機能しない場合があります。 Any は、 システム型の実装が遅くなる可能性があります

127.0.0.1 は IPv4 ループバック アドレスです。 ::1 は IPv6 ループバック アドレスです。 Any は IPv4 のワイルドカード アドレスです。 IPv6Any は IPv6 のワイルドカード アドレスです。

HTTP/1.x または HTTP/2.0 を使用する場合の IPv6 での現在の動作:

  • localhost[::1]に解決されます。
  • [::1] は、 127.0.0.1を使用して再試行を強制し、繰り返しサイクルを作成するサーバーでは受け入れられません。

上記の条件で Any を使用すると、 ASP0028 診断メッセージが発生します。 これらの条件が発生する可能性があるコードの例を次に示します。

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

規則の説明

使用可能なすべてのKestrelネットワーク インターフェイスで受信接続をリッスンするようにIPv6を構成するには、IPv6Anyを使用することをお勧めします。

違反の修正方法

問題のあるコードの場合は、 AnyIPv6Anyに置き換えます。

引数を指定せずに ListenAnyIP(Int32) メソッドを使用します。

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

または、 IPv6Any フィールドを使用します。

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

どのようなときに警告を抑制するか

ASP0028診断には、Information レベルの重大度があります。 サーバーで IPv6 の使用を完全に無効にすることを意図している場合は、この警告を抑制しますが、その場合は、この記事で説明されているパフォーマンスの問題が発生する可能性があります。

IPv6 は、システム全体で無効にすることも、 AppCtx スイッチまたは環境変数を介してのみ .NET に対して無効にすることもできます