You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5中IdnMapping.GetAscii抛ArgumentException原因及输入要求查询

.NET 5 针对 IdnMapping 的破坏性变更

存在相关破坏性变更,核心原因是.NET 5 对全球化底层实现做了调整:

  • .NET Core 3.1 及更早版本在Windows系统上默认使用 Windows 原生 NLS(国家语言支持)组件实现全球化相关API,IdnMapping 遵循 IDNA 2003 标准做域名校验,校验规则相对宽松。
  • .NET 5 及以上版本默认跨平台统一使用 ICU(国际化组件库)实现全球化API,IdnMapping 遵循更严格的 IDNA 2008 标准做校验,二者规则差异会导致之前可以正常执行的输入在新版抛出异常。

如果需要兼容.NET Core 3.1 的旧行为,可以通过运行时配置切换回 NLS 实现:

  1. 在项目的 runtimeconfig.json 文件中添加配置:
{
  "runtimeOptions": {
    "configProperties": {
      "System.Globalization.UseNls": true
    }
  }
}
  1. 或者启动程序前设置环境变量 DOTNET_SYSTEM_GLOBALIZATION_USENLS=true。

IdnMapping.GetAscii 输入字符串合规要求

按照 IDNA 2008 标准及.NET 的实现规则,输入的待转换域名需要满足以下要求:

  • 域名结构合法:不能以点号开头、结尾,不能出现连续点号
  • 标签长度要求:每个标签(点分隔的单个域名段)的 Unicode 原始长度不超过63字符,转换为 Punycode 后的ASCII长度也不能超过63字符
  • 总长度要求:整个域名转换为ASCII格式后,包含所有点分隔符的总长度不能超过253字符
  • 字符范围要求:不能包含 IDNA 标准禁用的字符,包括不可见控制字符、未被纳入标准的特殊Unicode符号等

你提供的示例触发异常的原因是输入字符串含点的总长度为254,超过了 IDNA 2008 要求的最大253字符的限制,ICU 严格校验后抛出了参数异常。

内容的提问来源于stack exchange,提问作者MkDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:27:06