HttpUtility.UrlEncode意外输出

本文关键字:输出 意外 UrlEncode HttpUtility | 更新日期: 2023-09-27 18:30:01

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

所以谷歌让我想到了这个:

url = HttpUtility.UrlEncode(url);

但这使得整个url不可用。我正在获取状态错误:来自Web服务器的操作无效。

我在iam使用编码之前得到了这个url:

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();

给了我同样的结果。

HttpUtility.UrlEncode意外输出

您应该只对查询字符串的值进行编码,而不是对整个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