Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpUtility.UrlEncode意外输出_C#_.net_Escaping_Uri - Fatal编程技术网

C# HttpUtility.UrlEncode意外输出

C# HttpUtility.UrlEncode意外输出,c#,.net,escaping,uri,C#,.net,Escaping,Uri,我正在尝试对url进行编码,以便HttpWebRequest可以使用诸如&之类的字符 所以谷歌把我带到这里: url = HttpUtility.UrlEncode(url); 但这使得整个url无法使用。Iam获取状态错误:来自Web服务器的操作无效 我在iam使用编码之前获得了此url: http://jira-test.myServer.de/rest/api/2/search?jql=labels = "F&E" 编码后我得到了这个: http%3a%2f%2fjira-te

我正在尝试对url进行编码,以便HttpWebRequest可以使用诸如&之类的字符

所以谷歌把我带到这里:

url = HttpUtility.UrlEncode(url);
但这使得整个url无法使用。Iam获取状态错误:来自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进行编码:

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

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