c # Multipart Form кодирование данных - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю над приложением C #, которое отправляет несколько небольших файлов на устройство с помощью данных многоэлементной формы. Мне не удалось заставить устройство фактически принимать данные, которые я отправляю, и у меня есть ощущение, что это связано с фактической кодировкой файла, так как он как-то передается, но я не совсем уверен , Он возвращает 200 / OK в качестве действительного POST, но не любит полезную нагрузку.

Я использую Chrome Dev Tools для максимально точного соответствия веб-интерфейса устройства. Одна вещь, которую я заметил, это то, что Dev Tools не показывает мне фактическую полезную нагрузку, а просто следующее, как будто она не может отобразить ее:

------WebKitFormBoundaryWwZOi6WAr7yb3yRE
Content-Disposition: form-data; name="[Redacted]"; filename="[AlsoRedacted]"
Content-Type: application/octet-stream


------WebKitFormBoundaryWwZOi6WAr7yb3yRE--

В качестве альтернативы, MessageBox, который я использовал для отладки, кажется, не имеет проблем с отображением.

Соответствующие части кода приведены ниже и будут признательны за любые предложения.

using (FileStream fs = new FileStream(Filename, FileMode.Open, FileAccess.Read))
    {
        using (MultipartFormDataContent Content = new MultipartFormDataContent(String.Format("----------{0:N}", Guid.NewGuid())))
        {
            StreamContent ContentStream = new StreamContent(fs);
            Content.Add(ContentStream, "filename", System.IO.Path.GetFileName(Filename));
            ContentStream.Headers.ContentDisposition.Name = "UploadEdid";
            ContentStream.Headers.ContentDisposition.FileNameStar = null;
            ContentStream.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");


            String ContentString = Content.ReadAsStringAsync().Result;
            System.Windows.MessageBox.Show(ContentString, ContentString.Length.ToString());

            using (HttpResponseMessage Response = await HttpClient.PostAsync(RequestUri, Content))
            {
                if (Response.IsSuccessStatusCode)
                {
                    HttpLoggedIn = true;
                    string ResponseString = await Response.Content.ReadAsStringAsync();

                    ParseHttpResponse(ResponseString);
                }
                else
                {
                    HttpLoggedIn = false;
                }
            }
        }
    }
...