使用字符串插值拼接URL报错404,改用string.Format可正常运行是什么原因?
问题根因
你遇到的问题是代码字符串中混入了不可见的零宽度空格字符(Unicode 编码 U+200B):
- 你写字符串插值代码时,
/freightcategories/和{categoryCode}之间存在一个零宽度空格,字符串插值运算会保留这个不可见字符到最终生成的URL中。一方面该字符会导致生成的URL路径和服务端实际接口路径不匹配,触发404错误;另一方面该字符没有显示宽度,你在调试工具里查看URL时会看起来像是末尾的categoryCode值没渲染、显示为空白。 - 你修改为
string.Format写法时,重新手动输入了路径部分,意外删除了对应位置的零宽度空格,所以生成的URL完全符合预期,请求可以正常执行。
验证方案
你可以通过以下方式确认隐藏字符的存在:
- 将原来的插值代码字符串复制到支持显示所有Unicode字符的编辑器(如VS Code、开启了「显示所有字符」功能的Notepad++)中,即可看到零宽度空格的特殊标记。
- 运行以下代码对比字符串长度即可验证:
var interpolatedUrl = $"{_baseAddress}/api/freightcategories/{categoryCode}"; var expectedLength = _baseAddress.Length + "/api/freightcategories/".Length + categoryCode.Length; // 输出的实际长度会大于预期长度,差值就是隐藏的零宽度空格数量 Console.WriteLine($"实际URL长度:{interpolatedUrl.Length},预期长度:{expectedLength}");
解决方案
直接手动重新输入完整的URL路径字符串,不要从网页、PDF等文档中直接复制粘贴路径内容,即可避免这类不可见控制字符混入代码的问题。
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

