2016-05-30 12 views
0

ich mit diesem Stück CodeHttpclient Post mit Sonderzeichen in 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) 
     { ... } 

Es funktioniert gut, außer in einem bestimmten Fall einen Beitrag zu tun versuchen, wo ich dies hat filePath „[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22 Transaktion # 796230257156844-1483918_v01_signed_2_signed_signed_signed_signed_signed_signed__v01.pdf“

auf die Antwort, die ich bekommen, wenn ich die RequestMessage sehen, ich habe

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

aber auf Fiddler sehe ich diese Anfrage statt https://xxx.xxxx.xxx/nodeapi/v1/file?fileName=[57481970e821f7f95a7b51ab]/ixair/2015-08-29T06-22%20Transaction%20

wie soll ich die Anfrage korrekt unter Berücksichtigung den sehr langen und seltsamen Zeichenfolge i auf filePath haben machen?

+0

Warum Sie FilePath-Eigenschaft verwenden, zu verwenden, anstatt Dateinamen? –

+0

es ist eine Anforderung von API (Client API, ich kann es nicht ändern) – Ric

Antwort

2

Versuchen Uri.EscapeDataString Methode für Ihre filePath Wert

UPDATE

Verwenden FileName statt FilePath

+0

Sie können einfachen Namen für Ihre Datei verwenden, z. 'fileToUpload.pdf'? –

+0

Ok, ich habe es geschafft zu arbeiten (machte zuerst einen Fehler und stattdessen EscapeUriString) danke – Ric