gpt4 book ai didi

.net - System.Uri 查询字符串中的文字与符号

转载 作者:行者123 更新时间:2023-12-04 22:52:12 24 4
gpt4 key购买 nike

我正在开发一个客户端应用程序,该应用程序使用 Restful 服务按名称查找公司。
重要的是我能够在查询中包含文字和号,因为这个字符在公司名称中很常见。

但是,每当我将 %26(URI 转义和号字符)传递给 System.Uri 时,它将其转换回常规的 & 字符!仔细检查后,仅有的两个未转换回的字符是哈希 (%23) 和百分比 (%25)。

假设我想搜索一家名为“Pierce & Pierce”的公司:

var endPoint = "http://localhost/companies?where=Name eq '{0}'";
var name = "Pierce & Pierce";
Console.WriteLine(new Uri(string.Format(endPoint, name)));
Console.WriteLine(new Uri(string.Format(endPoint, name.Replace("&", "%26"))));
Console.WriteLine(new Uri(string.Format(endPoint, Uri.EscapeUriString(name))));
Console.WriteLine(new Uri(string.Format(endPoint, Uri.EscapeDataString(name))));

以上四种组合都返回:
http://localhost/companies?where=Name eq 'Pierce & Pierce'

这会导致服务器端出现错误,因为与号被(正确)解释为查询 arg 分隔符。我真正需要它返回的是原始字符串:
http://localhost/companies?where=Name eq 'Pierce %26 Pierce'

如何在不丢弃的情况下解决此行为 System.Uri完全?
我不能在最后一刻用 %26 替换所有 & 符号,因为通常会涉及多个查询参数,我不想破坏它们的分隔符。

注:this question 中讨论了类似的问题但我特别指的是 System.Uri .

最佳答案

不仅仅是 URL 中的 & 符号不正确。有效的 URL 不能包含空格。
EscapeDataString方法可以很好地对字符串进行正确编码,您应该对整个值进行编码,而不仅仅是名称:

Uri.EscapeDataString("Name eq 'Pierce & Pierce'")

结果:
Name%20eq%20'Pierce%20%26%20Pierce'

创建 Uri 时使用这个字符串,它将是正确的。要查看 URL,您可以使用 AbsoluteUri属性(property)。如果你只是转换 Uri到字符串(调用 ToString 方法),URL 将不被转义,因此看起来不正确。

关于.net - System.Uri 查询字符串中的文字与符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2872430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com