对 URL 参数进行编码

问题描述 投票:0回答:4

我有一个正在构建 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 不起作用。我做错了什么?

c# .net url silverlight encoding
4个回答
105
投票

我建议使用 Uri.EscapeDataString 而不是使用 HttpUtility 函数。请参阅 Server.UrlEncode 与 HttpUtility.UrlEncode 中的讨论。


7
投票

尝试使用UrlPathEncode()方法。 查看备注: http://msdn.microsoft.com/en-us/library/h10z5byc.aspx

引用:

您可以使用以下命令对 URL 进行编码 UrlEncode() 方法或 UrlPathEncode() 方法。但是,那 方法返回不同的结果。这 UrlEncode()方法转换每个空格 字符到加号 (+)。这 UrlPathEncode() 方法将每个 空格字符插入字符串“%20”, 它代表一个空间 十六进制表示法。使用 编码时的 UrlPathEncode() 方法 URL 的路径部分,以便 保证一致的解码 URL, 无论是哪个平台或 浏览器执行解码。


0
投票

最安全的选择是使用 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/


0
投票

由于没有实际使用

Uri.EscapeDataString
的示例,我将添加我的。

using System;

var email = "[email protected]";
var url = $"https://api.domain.com/send-email?email={Uri.EscapeDataString(email)}";
© www.soinside.com 2019 - 2024. All rights reserved.