无法创建Uri求助:API返回JSON链接处理后出现%22异常
解决Uri中出现%22(双引号编码)的问题
你的问题核心是API返回的链接字符串里带着冗余的双引号,Regex.Unescape并没有帮你移除这些引号,反而把转义的引号转换成了实际的双引号,导致Uri创建时将其编码为%22。这里有个简单直接的解决思路:
第一步:清理冗余双引号
观察你的链接格式,引号只出现在首尾,用Trim('"')方法精准去除首尾的双引号是最稳妥的方式(比全局替换更安全,避免误删链接中间可能存在的合法引号)。示例代码:// 假设oldLink是从JSON解析后得到的字符串,比如值为 "\"/players/samir-handanovic/17974/\"" string cleanedLink = oldLink.Trim('"');执行后
cleanedLink就会变成干净的/players/samir-handanovic/17974/。第二步:生成正确的Uri
用清理后的链接创建Uri,就不会再出现%22的问题了:Uri link = new Uri("https://myendpoint.com", cleanedLink);
为什么之前的方法会出问题?
Regex.Unescape的作用是处理正则表达式中的转义字符(比如把\\n转换成换行符),它会把你字符串里的\"转成实际的双引号",但并不会帮你移除这些引号。而Uri规范中,双引号属于需要编码的特殊字符,所以创建Uri时会自动把"编码成%22,这就是你看到异常AbsolutePath的原因。
如果你的场景中引号可能出现在链接其他位置(虽然API返回的正常链接不太会这样),可以用Replace("\"", "")全局移除所有双引号,但还是优先推荐Trim('"'),它更贴合你当前的场景。
内容的提问来源于stack exchange,提问作者cojac
相关产品推荐
相关产品推荐

