2016-05-30 22 views
0

我試圖做一個職位有這段代碼HttpClient的發佈有特殊字符的URL - WinRT中

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 }} 

但菲德勒我看到這個請求,而不是 https://xxx.xxxx.xxx/nodeapi/v1/file?fileName=[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22%20Transaction%20

我應該如何提出請求正確考慮很長,怪異的字符串我有文件路徑?

+0

爲什麼您使用的文件路徑屬性,而不是文件名? –

+0

從API(客戶端API,我不能改變它)的要求 – Ric

回答

2

嘗試使用您filePath價值Uri.EscapeDataString方法

UPDATE

使用FileName代替FilePath

+0

你可以使用簡單的名稱爲您的文件,f.e. 'fileToUpload.pdf'? –

+0

好吧,我得到它的工作(首先犯了一個錯誤,而不是使用EscapeUriString)謝謝 – Ric