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。
如何解决冲突
对于有问题的代码,请替换为 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 具有 信息 级别严重性。 如果打算在服务器上完全禁用 IPv6 使用情况,请禁止显示此警告,不过这样做可能会危及本文中提到的性能问题。