我试图写一个windows客户端应用程序,调用一个网站的数据。为了使安装最小化,我尝试只使用。net框架客户端配置文件中的dll。麻烦的是,我需要UrlEncode一些参数,有没有一个简单的方法来做到这一点,而不导入System.Web.dll,这不是客户端Pofile的一部分?
当前回答
System.Uri.EscapeUriString()对于某些字符可能会有问题,对我来说,它是字符串中的数字/磅“#”符号。
如果这对你来说是个问题,试试:
System.Uri.EscapeDataString() //Works excellent with individual values
下面是一个SO问题的答案,解释了两者的区别:
EscapeUriString和EscapeDataString的区别是什么?
并建议在任何方面使用Uri.EscapeDataString()。
其他回答
有一个客户端配置文件可用的版本,System.Net.WebUtility类,在客户端配置文件System.dll中。这是MSDN链接:
WebUtility
你可以使用
Uri。EscapeUriString(参见http://msdn.microsoft.com/en-us/library/system.uri.escapeuristring.aspx)
System.Net.WebUtility.HtmlDecode
在.Net 4.5+中使用WebUtility
只是为了格式,我把这个作为答案提交。
我找不到任何比较它们的例子,所以:
string testString = "http://test# space 123/text?var=val&another=two";
Console.WriteLine("UrlEncode: " + System.Web.HttpUtility.UrlEncode(testString));
Console.WriteLine("EscapeUriString: " + Uri.EscapeUriString(testString));
Console.WriteLine("EscapeDataString: " + Uri.EscapeDataString(testString));
Console.WriteLine("EscapeDataReplace: " + Uri.EscapeDataString(testString).Replace("%20", "+"));
Console.WriteLine("HtmlEncode: " + System.Web.HttpUtility.HtmlEncode(testString));
Console.WriteLine("UrlPathEncode: " + System.Web.HttpUtility.UrlPathEncode(testString));
//.Net 4.0+
Console.WriteLine("WebUtility.HtmlEncode: " + WebUtility.HtmlEncode(testString));
//.Net 4.5+
Console.WriteLine("WebUtility.UrlEncode: " + WebUtility.UrlEncode(testString));
输出:
UrlEncode: http%3a%2f%2ftest%23+space+123%2ftext%3fvar%3dval%26another%3dtwo
EscapeUriString: http://test#%20space%20123/text?var=val&another=two
EscapeDataString: http%3A%2F%2Ftest%23%20space%20123%2Ftext%3Fvar%3Dval%26another%3Dtwo
EscapeDataReplace: http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo
HtmlEncode: http://test# space 123/text?var=val&another=two
UrlPathEncode: http://test#%20space%20123/text?var=val&another=two
//.Net 4.0+
WebUtility.HtmlEncode: http://test# space 123/text?var=val&another=two
//.Net 4.5+
WebUtility.UrlEncode: http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo
在. net 4.5+中使用WebUtility。UrlEncode
这似乎复制了HttpUtility。UrlEncode (v4.0之前)用于更常见的字符: Uri.EscapeDataString (testString)。替换(“% 20”,“+”)。替换(“”、“”)。替换(“~”,“% 7 e”) 注意:EscapeUriString将保留一个有效的uri字符串,这将导致它使用尽可能多的明文字符。
请参阅比较各种编码的表格的答案: https://stackoverflow.com/a/11236038/555798
换行符 这里列出的所有代码(HttpUtility.HtmlEncode除外)都将“\n\r”转换为%0a%0d或%0a%0d
请随意编辑,并向我的测试字符串中添加新字符,或将它们留在评论中,我会编辑它。
下面是一个发送POST请求的例子,使用application/x-www-form-urlencoded内容类型正确编码参数:
using (var client = new WebClient())
{
var values = new NameValueCollection
{
{ "param1", "value1" },
{ "param2", "value2" },
};
var result = client.UploadValues("http://foo.com", values);
}
推荐文章
- 如何在c#中获得正确的时间戳
- Linq选择列表中存在的对象(A,B,C)
- c# .NET中的App.config是什么?如何使用它?
- c#:如何获得一个字符串的第一个字符?
- String类中的什么方法只返回前N个字符?
- 我如何提高ASP。NET MVC应用程序性能?
- 更好的方法将对象转换为int类型
- 我可以将c#字符串值转换为转义字符串文字吗?
- 在c#中转换char到int
- c#中朋友的对等物是什么?
- 关键字使用virtual+override vs. new
- 无法解析类型为“Microsoft.AspNetCore.Http.IHttpContextAccessor”的服务
- 在ASP中选择Tag Helper。NET Core MVC
- 如何在没有任何错误或警告的情况下找到构建失败的原因
- 跨线程操作无效:控件“textBox1”从创建它的线程以外的线程访问