【问题标题】:HttpUtility.UrlEncode unexpected outputHttpUtility.UrlEncode 意外输出
【发布时间】:2016-01-12 10:57:33
【问题描述】:

我正在尝试对 url 进行编码,以便 HttpWebRequest 可以使用 & 等字符。

所以谷歌给我带来了这个:

url = HttpUtility.UrlEncode(url);

但这会使整个 url 无法使用。我收到状态错误:来自 Web 服务器的无效操作。

我在使用编码之前得到了这个网址:

http://jira-test.myServer.de/rest/api/2/search?jql=labels = "F&E"

编码后我得到了这个:

http%3a%2f%2fjira-test.brillux.de%2frest%2fapi%2f2%2fsearch%3fjql%3dlabels+%3d+%22F%26E%22

我做错了什么?在我看来,它不应该在 http 等之后替换 //... 或者有其他方法来处理这个问题吗?

信息:

Uri.EscapeDataString();

给我同样的结果。

【问题讨论】:

    标签: c# .net escaping uri


    【解决方案1】:

    您应该只编码查询字符串的值,而不是整个 URI:

    var uri = "http://jira-test.myServer.de/rest/api/2/search?jql=" +
              HttpUtility.UrlEncode("labels = \"F&E\"");
    
    // Result: http://jira-test.myServer.de/rest/api/2/search?jql=labels+%3d+%22F%26E%22
    

    构造这个的正确方法:

    // Construct query string using HttpValueCollection, which handles escaping:
    var queryString = HttpUtility.ParseQueryString(string.Empty);
    queryString.Add("jql", "labels = \"F&E\"");
    
    // Combine base URI with query string through UriBuilder:
    var uriBuilder = new UriBuilder("http://jira-test.myServer.de/rest/api/2/search");
    uriBuilder.Query = queryString.ToString();
    
    // Get string representation:
    string uri = uriBuilder.ToString();
    
    // Result: http://jira-test.myserver.de:80/rest/api/2/search?jql=labels+%3d+%22F%26E%22
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-16
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2021-10-13
      • 2020-02-21
      • 2020-12-28
      相关资源
      最近更新 更多