我有一个ASP。. NET MVC控制器,使用HttpClient类调用另一个服务。
var url = "some url";
var client = new HttpClient();
var result= client.GetAsync(url);
我发送的URL包含一些特殊字符。如何在ASP中对特殊字符进行编码。。NET MVC控制器?
谢谢! !1
试试这个:
url = HttpUtility.UrlEncode(url);
当您正在考虑将URL用作请求(带有HttpClient.getAsync
)而不是作为另一个URL的参数时,您应该使用Uri.EscapeUriString
。
下面是三个URL方法的比较:
var url = "http://some url?data=x y+z&user=1#ok";
HttpUtility。UrlEncode
Console.WriteLine(HttpUtility.UrlEncode(url));
3http % % 2 f % 2 fsome +网址% 3 fdata % 3 dx + y % 2 bz % 26用户% 3 d1 % 23好
显然,这是不希望的:URL被损坏与/
逃脱,+
进入路径,…等。该方法似乎对URL的查询部分很有用,但对整个URL不是很有用。
HttpUtility。UrlPathEncode
Console.WriteLine(HttpUtility.UrlPathEncode(url));
http://some%20url?数据y = x + z&用户= 1 #好
这看起来很有用,尽管查询部分的空间有点问题(注意这里的断开超链接,尽管浏览器可以处理它)。但更重要的是,该方法已被弃用:
不要使用;仅用于浏览器兼容性。使用
UrlEncode
.
Uri。EscapeUriString
Console.WriteLine(Uri.EscapeUriString(url));
http://some%20url?data=x%20y + z&用户= 1 #好
这似乎做得很好:%20
是一个转义序列,所有现代浏览器都应该支持,也出现在URL的查询部分时。
从第3版开始,在Razor视图引擎中不需要编码,而且非常方便。相反,如果你想使用标签,你应该使用:
@Html.Raw(myString)
所以基本上使用Razor是默认带有编码的
您应该使用HttpUtility。UrlPathEncode
当你使用url = httutility . urlencode (url)时,它不能很好地处理空格