我有一个正在构建 URL 的 Silverlight 应用程序。此 URL 是对基于 REST 的服务的调用。该服务需要一个代表位置的参数。位置的形式为“城市、州”。为了构建这个 URL,我调用以下代码:
string url = "http://www.example.com/myService.svc/";
url += HttpUtility.UrlEncode(locationTextBox.Text);
如果用户在 locationTextBox 中输入“chicago, il”,结果如下所示:
http://www.example.com/myService.svc/chicago%2c+il
但实际上,我有点期待 URL 看起来像这样;
http://www.example.com/myService.svc/chicago,%20il
通过浏览器 URL 测试我的服务时,我期望的服务可以正常工作。但是,正在生成的 URL 不起作用。我做错了什么?
我建议使用 Uri.EscapeDataString 而不是使用 HttpUtility 函数。请参阅 Server.UrlEncode 与 HttpUtility.UrlEncode 中的讨论。
尝试使用UrlPathEncode()方法。 查看备注: http://msdn.microsoft.com/en-us/library/h10z5byc.aspx
引用:
您可以使用以下命令对 URL 进行编码 UrlEncode() 方法或 UrlPathEncode() 方法。但是,那 方法返回不同的结果。这 UrlEncode()方法转换每个空格 字符到加号 (+)。这 UrlPathEncode() 方法将每个 空格字符插入字符串“%20”, 它代表一个空间 十六进制表示法。使用 编码时的 UrlPathEncode() 方法 URL 的路径部分,以便 保证一致的解码 URL, 无论是哪个平台或 浏览器执行解码。
最安全的选择是使用 AntiXss 库。它有更多标准(和安全)版本,用于对内容进行各种目的编码(例如 Url 编码、Html 和 HtmlAttribute 编码等)。 有旧的 3.1 版本可以从 MS 网站下载 (http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09),它可以与旧的 .NET 一起使用版本,新版本位于 http://wpl.codeplex.com/
由于没有实际使用
Uri.EscapeDataString
的示例,我将添加我的。
using System;
var email = "[email protected]";
var url = $"https://api.domain.com/send-email?email={Uri.EscapeDataString(email)}";