2017-02-13 31 views
5

Jak wysłać plik i dane formularza za pomocą HttpClient?Jak wysłać plik i utworzyć dane za pomocą HttpClient w C#

Mam dwa sposoby wysyłania pliku lub danych formularza. Ale chcę wysłać zarówno jak formularz HTML. Jak mogę to zrobić? Dzięki.

To jest mój kod:

  if (openFileDialog1.ShowDialog() == DialogResult.OK) 
    { 
     var client = new HttpClient(); 
     var requestContent = new MultipartFormDataContent(); 
     filename = openFileDialog1.FileName; 
     array = File.ReadAllBytes(filename); 
     var imageContent = new ByteArrayContent(array); 
     imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("audio/*"); 
     requestContent.Add(imageContent, "audio", "audio.wav"); 
     var values = new Dictionary<string, string> 
     { 
     { "token", "b53b99534a137a71513548091271c44c" }, 
     }; 
     var content = new FormUrlEncodedContent(values); 
     requestContent.Add(content); 
     var response = await client.PostAsync("localhost", requestContent); 
     var responseString = await response.Content.ReadAsStringAsync(); 
     txtbox.Text = responseString.ToString(); 
    } 
+1

masz już/tryb wieloczęściowy formularz. Wystarczy dodać więcej pozycji do żądania pocztowego ('requestContent'). – dlatikay

+0

Będę wdzięczny wyjaśnić, jak to zrobić – user2254798

Odpowiedz

8

Oto kod używam do zamieszczać informacje i formularz plik CSV

 using (var httpClient = new HttpClient()) 
     { 
      var surveyBytes = ConvertToByteArray(surveyResponse); 

      httpClient.DefaultRequestHeaders.Add("X-API-TOKEN", _apiToken); 
      httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      var byteArrayContent = new ByteArrayContent(surveyBytes); 
      byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("text/csv"); 

      var response = await httpClient.PostAsync(_importUrl, new MultipartFormDataContent 
      { 
       {new StringContent(surveyId), "\"surveyId\""}, 
       {byteArrayContent, "\"file\"", "\"feedback.csv\""} 
      }); 

      return response; 
     } 

Jest to dla .NET 4.5.

Zanotuj \”w MultipartFormDataContent. Jest bug w MultipartFormDataContent.

W 4.5.1 MultipartFormDataContent zawija dane z odpowiednimi cytatami.

+0

dzięki .i jestem noob w C# ale Czy możesz mi pomóc rozwiązać problem? – user2254798

+0

dałem ci działający przykład jak po użyciu MultipartFormDataContent. Nie wiem, jakie wymagania musi spełniać strona, do której próbujesz publikować. Token powinien znajdować się w treści lub nagłówek? jakie typy strona oczekuje na publikację? – Fran

+0

jeśli to nie odpowiada na twoje pytanie, proszę dodaj więcej informacji, co dokładnie próbujesz osiągnąć. – dlatikay