2016-04-25 7 views
3

Ich versuche, eine Datei mit POST auf eine FlashAir-Karte hochzuladen. Es gibt ein JavaScript-Beispiel, das auf meinem Computer funktioniert:Versuch, POST-Beispiel nach C# zu kopieren

Ich versuche, das gleiche mit .NET zu erreichen. Dies ist, was ich getan habe:

var cgi="http://flashair/upload.cgi"; 
byte[] bytes = File.ReadAllBytes(filename); 
HttpContent bytesContent = new ByteArrayContent(fileData); 

using (var client = new HttpClient()) 
{ 
    using (var formData = new MultipartFormDataContent()) 
    { 
     formData.Add(bytesContent, "file"); 
     var response = client.PostAsync(command, formData).Result; 
     if (!response.IsSuccessStatusCode) 
     { 
      return false; 
     }  
     return true; 
    } 
} 

Während das erste Beispiel funktioniert, auch meine C# -Variante gibt einen 200-Code (und dauert eine Weile, die mich denken lässt, dass die Datei hochgeladen werden), aber die Datei wird nicht gespeichert.

Irgendeine Idee wo ist der Unterschied zwischen den zwei Beispielen, die das Problem verursachen könnten?

+3

Sie könnten Fiddler verwenden, um beide POST-Anfragen zu prüfen und zu sehen, wie sie sich unterscheiden –

Antwort

0

Fiddler brachte mich in die richtige Richtung. Ein Unterschied zwischen den JS und C# -Variante war der Kopf

Expect: 100-continue 

, die nur auf der .NET-Variante erschienen. Das war nicht einfach zu entfernen. In der Tat mit dem Hinweis aus anderen Antworten hier auf SO

keine Wirkung zu haben schien, als Httpclient verwenden. So deciced ich eine modifizierte Version dieses Codes zu verwenden: https://stackoverflow.com/a/2996904

und fügen Sie einfach die folgende Zeile:

HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url); 
wr.ServicePoint.Expect100Continue = false; 

Dies verursachte die Expect-100-Header entfernt werden und die Datei wurde erfolgreich hochgeladen.

Verwandte Themen