ASP0028:考虑使用
值 | |
---|---|
规则 ID | ASP0028 |
类别 | 使用情况 |
修复是中断修复还是非中断修复 | 非中断 |
原因
在支持 IPv6
的服务器计算机上, IPv6Any 优先于 Any ,因为 Any
可能比 IPv6Any
。 在某些情况下, 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
。
如何解决冲突
对于有问题的代码,请替换为 Any
IPv6Any
。
ListenAnyIP(Int32)使用该方法而不指定任何参数:
.UseKestrel().ConfigureKestrel(options =>
{
- options.Listen(IPAddress.Any, ...);
+ options.ListenAnyIP(...);
})
IPv6Any或使用字段:
.UseKestrel().ConfigureKestrel(options =>
{
- options.Listen(IPAddress.Any, ...);
+ options.Listen(IPAddress.IPv6Any, ...);
})
何时禁止显示警告
诊断 ASP0028
具有 信息 级别严重性。 如果打算在服务器上完全禁用 IPv6
使用情况,请禁止显示此警告,不过这样做可能会危及本文中提到的性能问题。