使用带有 Windows-1252 编码的 HttpClient url
Using HttpClient with Windows-1252 encoded url
我正在尝试使用 System.Net.HttpClient 与一个非常简单的网络 API 进行通信。这个 API 客户端有一个搜索功能,我可以通过他的名字搜索用户。问题是 API 在 url 中使用 Windows 1252 编码,当我尝试将 Windows 1252 编码 url 与 HttpClient 一起使用时, HttpClient 在发出请求之前使用 utf-8 对 url 进行编码。
string name = "Arnar Aðalsteinsson"; // My name, note the 'ð' character
string encodedName = HttpUtility.UrlEncode(name, Encoding.GetEncoding(1252));
string url = string.Format("http://website.com/find?name={0}", encodedName);
// url = http://website.com/find?name=Arnar+A%f0dalsteinsson
string result = httpClient.GetStringAsync(url)
// result = "Name A%f0dalsteinsson is unknown", actual output from API service
// httpClient encodes the previously encoded parameter to A%25f0dalsteinsson
当我在浏览器中使用编码地址 (http://website.com/find?name=Arnar+A%f0dalsteinsson) 时,它工作正常。
感谢任何帮助。
我在尝试重现时找不到问题,它在我这边工作正常,请尝试使用 fiddler 查看您的请求结果,可能是您服务器端的问题。
这是我的代码:
string name = "Arnar Aðalsteinsson";
string encodedName = HttpUtility.UrlEncode(name, Encoding.GetEncoding(1252));
string url = string.Format("http://website.com/find?name={0}", encodedName);
HttpClient httpClient = new HttpClient();
try
{
**string result = httpClient.GetStringAsync(url).Result;**
}
catch (System.AggregateException ex) {
Debug.WriteLine(ex.Message);
}
结果:网站。com/find?name=Arnar+A%f0alsteinsson
我正在尝试使用 System.Net.HttpClient 与一个非常简单的网络 API 进行通信。这个 API 客户端有一个搜索功能,我可以通过他的名字搜索用户。问题是 API 在 url 中使用 Windows 1252 编码,当我尝试将 Windows 1252 编码 url 与 HttpClient 一起使用时, HttpClient 在发出请求之前使用 utf-8 对 url 进行编码。
string name = "Arnar Aðalsteinsson"; // My name, note the 'ð' character
string encodedName = HttpUtility.UrlEncode(name, Encoding.GetEncoding(1252));
string url = string.Format("http://website.com/find?name={0}", encodedName);
// url = http://website.com/find?name=Arnar+A%f0dalsteinsson
string result = httpClient.GetStringAsync(url)
// result = "Name A%f0dalsteinsson is unknown", actual output from API service
// httpClient encodes the previously encoded parameter to A%25f0dalsteinsson
当我在浏览器中使用编码地址 (http://website.com/find?name=Arnar+A%f0dalsteinsson) 时,它工作正常。
感谢任何帮助。
我在尝试重现时找不到问题,它在我这边工作正常,请尝试使用 fiddler 查看您的请求结果,可能是您服务器端的问题。
这是我的代码:
string name = "Arnar Aðalsteinsson";
string encodedName = HttpUtility.UrlEncode(name, Encoding.GetEncoding(1252));
string url = string.Format("http://website.com/find?name={0}", encodedName);
HttpClient httpClient = new HttpClient();
try
{
**string result = httpClient.GetStringAsync(url).Result;**
}
catch (System.AggregateException ex) {
Debug.WriteLine(ex.Message);
}
结果:网站。com/find?name=Arnar+A%f0alsteinsson