asp.net mvc中asp.net等效的server.htmlencode

时间:2014-05-07 11:28:32

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一个ASP.NET MVC控制器,它使用HttpClient类调用另一个服务。

             var url = "some url";
             var client = new HttpClient();
             var result= client.GetAsync(url);

我发送的网址包含一些特殊字符。如何在ASP.NET MVC控制器中编码特殊字符?

谢谢!1

4 个答案:

答案 0 :(得分:3)

试试这个:

url = HttpUtility.UrlEncode(url);

答案 1 :(得分:0)

当您考虑将用于请求的网址(使用HttpClient.getAsync) - 而不是作为其他网址中的参数时 - 您应该使用Uri.EscapeUriString

以下是以下网址的三种方法的比较:

var url = "http://some url?data=x y+z&user=1#ok";

HttpUtility.UrlEncode

Console.WriteLine(HttpUtility.UrlEncode(url));
  

的http%3A%2F%2fsome + URL%3fdata%3DX + Y%2BZ%26user%3D1%23ok

显然,这是不可取的:在/转义,路径中输入了+,等等时,网址已损坏。该方法对于URL的查询部分似乎很有用,但对整个批次来说并非如此。

HttpUtility.UrlPathEncode

Console.WriteLine(HttpUtility.UrlPathEncode(url));
  

http://some%20url?data=x y + z& user = 1#ok

这看起来很有用,虽然空间在查询部分有点问题(请注意这里破坏的超链接,尽管浏览器可以处理它)。但更重要的是,该方法已被弃用:

  

不要使用;仅用于浏览器兼容性。使用UrlEncode

Uri.EscapeUriString

Console.WriteLine(Uri.EscapeUriString(url));
  

http://some%20url?data=x%20y+z&user=1#ok

这似乎做得很好:%20是一个所有现代浏览器都应该支持的转义序列,也就是在URL的查询部分发生时。

答案 2 :(得分:-1)

从第3版开始,Razor View Engine无需编码,而且非常方便。相反,如果你想使用标签,你应该使用:

@Html.Raw(myString)

所以基本上只使用Razor默认配置编码。

答案 3 :(得分:-1)

您应该使用HttpUtility.UrlPathEncode

当你使用url = HttpUtility.UrlEncode(url)时,它对空格不起作用。