Nat*_*lch 4 .net uri escaping query-string
我正在开发一个客户端应用程序,它使用一个宁静的服务来按名称查找公司.重要的是,我能够在查询中包含文字&符号,因为这个字符在公司名称中非常常见.
但是每当我将%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))));
Run Code Online (Sandbox Code Playgroud)
以上所有四种组合都返回:
http://localhost/companies?where=Name eq 'Pierce & Pierce'
Run Code Online (Sandbox Code Playgroud)
这会导致服务器端出错,因为&符号被(正确地)解释为查询arg分隔符.我真正需要它返回的是原始字符串:
http://localhost/companies?where=Name eq 'Pierce %26 Pierce'
Run Code Online (Sandbox Code Playgroud)
如何在不System.Uri
完全丢弃的情况下解决此问题?我不能在最后一刻用%26替换所有的&符号,因为通常会涉及多个查询参数,我不想破坏它们的分隔符.
注意:在这个问题中讨论了类似的问题,但我特别指的是System.Uri
.
Guf*_*ffa 10
它不仅是URL中的&符号不正确.有效的URL不能包含空格.
该EscapeDataString
方法可以正常编码字符串,您应该编码整个值,而不仅仅是名称:
Uri.EscapeDataString("Name eq 'Pierce & Pierce'")
Run Code Online (Sandbox Code Playgroud)
结果:
Name%20eq%20'Pierce%20%26%20Pierce'
Run Code Online (Sandbox Code Playgroud)
Uri
使用此字符串创建时,它将是正确的.要查看URL,您可以使用该AbsoluteUri
属性.如果您只是将其转换Uri
为字符串(调用ToString
方法),则URL将不会转义,因此显示不正确.
归档时间: |
|
查看次数: |
3859 次 |
最近记录: |