我知道可移植类库很好地支持发出 Web 请求。PCL 中是否有 HttpUtility.UrlEncode 的等价物?我需要它用于 Windows Phone 和 Metro 应用程序。
问问题
5333 次
2 回答
36
使用Uri.EscapeUriString
和Uri.EscapeDataString
两者之间的唯一区别是EscapeDataString
它还对包含这些字符的 RFC 2396 保留字符进行编码;/?:@&=+$
,
重要的是要注意,这些方法都没有对 RFC 2396 未保留字符进行编码,-_.!~*'()
因此如果您需要这些编码,则必须手动对它们进行编码。
于 2012-07-13T17:02:22.517 回答
15
网络实用程序
在有幸以 .NET 4.5(例如 Profile7)为目标的可移植类库中,许多 HttpUtility 方法在System.Net.WebUtility
.
using System.Net;
WebUtility.UrlEncode("some?string#");
潜在警告
虽然一些同级方法看起来与它们的 HttpUtility 对应方法相同,但这个方法在生成的编码之间略有不同。WebUtility.UrlEncode
生成大写编码,同时HttpUtility.UrlEncode
生成小写编码。
WebUtility.UrlEncode("?") // -> "%3F"
HttpUtility.UrlEncode("?") // -> "%3f"
使其向后兼容
如果您依赖您的 PCL 代码生成与之前的 HttpUtility 代码完全相同的内容,您可以围绕此方法创建自己的辅助方法并对其进行正则表达式。
using System.Text.RegularExpressions;
public static string UrlEncodeOldSchool(string value) {
var encodedValue = WebUtility.UrlEncode(value);
return Regex.Replace(encodedValue, "(%[0-9A-F]{2})",
encodedChar => encodedChar.Value.ToLowerInvariant());
}
(尽管这是一个简单的,但始终需要您自担正则表达式的风险。)
于 2015-03-10T21:30:58.900 回答