如何在.NET Framework 4.8中创建不解码%2F的URI
解决方案
在.NET Framework 4.8的经典ASP.NET Web API项目中,要保留URI中的%2F不被解码为/,可以通过以下两种方式实现:
方法一:使用Uri.GetComponents控制编码格式
利用Uri.GetComponents方法指定URI组件,并通过UriFormat.UriEscaped格式保留已编码的字符:
var str = "https://www.google.com/maps/search/C%2F-%20GBI%20Logistics%2C%2078%20Mallard%20Way%20(Door%20%232)%2C%20CANNINGTON%2C%20WA%2C%206107"; Uri uri = new Uri(str); // 拼接Scheme、Authority及保留编码的路径查询部分 string result = $"{uri.Scheme}://{uri.Authority}{uri.GetComponents(UriComponents.PathAndQuery, UriFormat.UriEscaped)}"; // 输出符合预期的结果:https://www.google.com/maps/search/C%2F- GBI Logistics, 78 Mallard Way (Door %232), CANNINGTON, WA, 6107
方法二:手动拆分拼接URI组件
直接拆分原URI的各个部分并手动拼接,绕过Uri类的自动解码逻辑:
var str = "https://www.google.com/maps/search/C%2F-%20GBI%20Logistics%2C%2078%20Mallard%20Way%20(Door%20%232)%2C%20CANNINGTON%2C%20WA%2C%206107"; // 拆分协议头与剩余内容 string[] schemeSplit = str.Split(new[] { "://" }, StringSplitOptions.None); string scheme = schemeSplit[0]; string rest = schemeSplit[1]; // 拆分域名与路径查询部分 string[] authoritySplit = rest.Split(new[] { "/" }, 2); string authority = authoritySplit[0]; string pathAndQuery = "/" + authoritySplit[1]; // 拼接得到目标URI string result = $"{scheme}://{authority}{pathAndQuery}";
注意事项
- 过时的
new Uri(uriString, dontEscape)重载已失效,该参数会被强制设为false,请勿使用。 - 两种方法均能避免
%2F被解码为/,确保URI路径与原字符串逻辑一致。
内容的提问来源于stack exchange,提问作者Brendan Gooden
相关产品推荐
相关产品推荐

