HttpClient post 具有 url 中的特殊字符 - WinRT
HttpClient post with special characters in url - WinRT
我想用这段代码做一个post
try
{
using (var httpClient = new HttpClient { BaseAddress = Constants.baseAddress })
{
var content = new StreamContent(binaries);
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", App.Current.Resources["token"] as string);
App.Current.Resources["TaskUpload"] = true;
using (var response = await httpClient.PostAsync("file?fileName=" + filePath, content))
{
string responseData = await response.Content.ReadAsStringAsync();
if (responseData.Contains("errorCode"))
throw new Exception("Exception: " + responseData);
else
{
JsonObject jObj = new JsonObject();
JsonObject.TryParse(responseData, out jObj);
if (jObj.ContainsKey("fileId"))
{
if (jObj["fileId"].ValueType != JsonValueType.Null)
{
App.Current.Resources["NewVersionDoc"] = jObj["fileId"].GetString();
}
}
}
return true;
}
}
}
catch (Exception e)
{ ... }
它工作得很好,除了在我有这个文件路径的特殊情况下
“[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22 交易#796230257156844-1483918_v01_signed_2_signed_signed_signed_signed_signed_signed__v01.pdf”
如果我看到 RequestMessage 我得到的响应
{Method: POST, RequestUri: 'https://xxx.xxxxx.xxx/nodeapi/v1/file?fileName=[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22 Transaction
#796230257156844-1483918_v01_signed_2_signed_signed_signed_signed_signed_signed__v01.pdf', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Authorization: Bearer 1iIvQBegqtaZgvPmDk1GGHpFOBR3M8C0nVsxxxxxxx= Content-Length: 240578 }}
但是在 Fiddler 上我看到了这个请求
https://xxx.xxxx.xxx/nodeapi/v1/file?fileName=[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22%20Transaction%20
考虑到我在 filePath 上的字符串又长又奇怪,我应该如何正确地发出请求?
尝试为您的 filePath
值使用 Uri.EscapeDataString
方法
更新
使用 FileName
代替 FilePath
我想用这段代码做一个post
try
{
using (var httpClient = new HttpClient { BaseAddress = Constants.baseAddress })
{
var content = new StreamContent(binaries);
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", App.Current.Resources["token"] as string);
App.Current.Resources["TaskUpload"] = true;
using (var response = await httpClient.PostAsync("file?fileName=" + filePath, content))
{
string responseData = await response.Content.ReadAsStringAsync();
if (responseData.Contains("errorCode"))
throw new Exception("Exception: " + responseData);
else
{
JsonObject jObj = new JsonObject();
JsonObject.TryParse(responseData, out jObj);
if (jObj.ContainsKey("fileId"))
{
if (jObj["fileId"].ValueType != JsonValueType.Null)
{
App.Current.Resources["NewVersionDoc"] = jObj["fileId"].GetString();
}
}
}
return true;
}
}
}
catch (Exception e)
{ ... }
它工作得很好,除了在我有这个文件路径的特殊情况下 “[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22 交易#796230257156844-1483918_v01_signed_2_signed_signed_signed_signed_signed_signed__v01.pdf”
如果我看到 RequestMessage 我得到的响应
{Method: POST, RequestUri: 'https://xxx.xxxxx.xxx/nodeapi/v1/file?fileName=[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22 Transaction
#796230257156844-1483918_v01_signed_2_signed_signed_signed_signed_signed_signed__v01.pdf', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Authorization: Bearer 1iIvQBegqtaZgvPmDk1GGHpFOBR3M8C0nVsxxxxxxx= Content-Length: 240578 }}
但是在 Fiddler 上我看到了这个请求 https://xxx.xxxx.xxx/nodeapi/v1/file?fileName=[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22%20Transaction%20
考虑到我在 filePath 上的字符串又长又奇怪,我应该如何正确地发出请求?
尝试为您的 filePath
值使用 Uri.EscapeDataString
方法
更新
使用 FileName
代替 FilePath