HttpUtility.UrlEncode 意外输出
HttpUtility.UrlEncode unexpected output
我正在尝试对 url 进行编码,以便 HttpWebRequest 可以使用 &.
等字符
所以 google 让我想到这个:
url = HttpUtility.UrlEncode(url);
但这使得整个url无法使用。我收到状态错误:来自 Web 服务器的操作无效。
我在使用编码之前得到了这个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();
给我同样的结果。
您应该只编码查询字符串的值,而不是整个 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
我正在尝试对 url 进行编码,以便 HttpWebRequest 可以使用 &.
等字符所以 google 让我想到这个:
url = HttpUtility.UrlEncode(url);
但这使得整个url无法使用。我收到状态错误:来自 Web 服务器的操作无效。
我在使用编码之前得到了这个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();
给我同样的结果。
您应该只编码查询字符串的值,而不是整个 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