我有一个ASP.NET MVC控制器,它使用HttpClient类调用另一个服务。
var url = "some url";
var client = new HttpClient();
var result= client.GetAsync(url);
我发送的网址包含一些特殊字符。如何在ASP.NET MVC控制器中编码特殊字符?
谢谢!1
答案 0 :(得分:3)
试试这个:
url = HttpUtility.UrlEncode(url);
答案 1 :(得分:0)
当您考虑将用于请求的网址(使用HttpClient.getAsync
) - 而不是作为其他网址中的参数时 - 您应该使用Uri.EscapeUriString
。
以下是以下网址的三种方法的比较:
var url = "http://some url?data=x y+z&user=1#ok";
Console.WriteLine(HttpUtility.UrlEncode(url));
的http%3A%2F%2fsome + URL%3fdata%3DX + Y%2BZ%26user%3D1%23ok
显然,这是不可取的:在/
转义,路径中输入了+
,等等时,网址已损坏。该方法对于URL的查询部分似乎很有用,但对整个批次来说并非如此。
Console.WriteLine(HttpUtility.UrlPathEncode(url));
http://some%20url?data=x y + z& user = 1#ok
这看起来很有用,虽然空间在查询部分有点问题(请注意这里破坏的超链接,尽管浏览器可以处理它)。但更重要的是,该方法已被弃用:
不要使用;仅用于浏览器兼容性。使用
UrlEncode
。
Console.WriteLine(Uri.EscapeUriString(url));
这似乎做得很好:%20
是一个所有现代浏览器都应该支持的转义序列,也就是在URL的查询部分发生时。
答案 2 :(得分:-1)
从第3版开始,Razor View Engine无需编码,而且非常方便。相反,如果你想使用标签,你应该使用:
@Html.Raw(myString)
所以基本上只使用Razor默认配置编码。
答案 3 :(得分:-1)
您应该使用HttpUtility.UrlPathEncode
当你使用url = HttpUtility.UrlEncode(url)时,它对空格不起作用。