编码URL的参数

时间:2011-02-23 18:30:52

标签: c# silverlight url encoding

我有一个构建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无法正常工作。我做错了什么?

3 个答案:

答案 0 :(得分:67)

我建议使用UriEscapeDataString,而不是使用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/