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