Невозможно POST метаданные и multipart одновременно. Получение 400 плохих запросов - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь загрузить файл и добавить некоторые данные JSON в параметрах запроса (см. Код ниже) из моего приложения UWP.Но я получаю 400 плохих запросов.Не уверен, что мне здесь не хватает.Но я могу выполнить то же самое с почтальоном и получить 200 OK.

Может кто-нибудь помочь?

        string apiUrl = BuildUrl(url, apiContext);

        // req params which has the json string as key value pair and few other request parameters
        Uri uri = BuildUriWithQueryParams(apiUrl, reqParams);

        HttpRequestMessage reqMsg = new HttpRequestMessage(HttpMethod.Post, uri);

        // File upload
        if (files != null && files.Count > 0)
        {
            HttpMultipartFormDataContent formDataContent = new HttpMultipartFormDataContent();
            foreach (StorageFile storageFile in files)
            {
                var inputStream = await storageFile.OpenAsync(FileAccessMode.Read);
                HttpStreamContent httpStreamContent = new HttpStreamContent(inputStream);
                formDataContent.Add(httpStreamContent, "doc", storageFile.Name);
            }
            reqMsg.Content = formDataContent;
        }
        var response = await HttpClient.SendRequestAsync(reqMsg);//.AsTask(cts.Token);

1 Ответ

1 голос
/ 06 июня 2019

Удаление параметров запроса JSON из параметров запроса и добавление в HttpStringContent решили проблему для меня. Упомянутый ниже необходимых изменений.

 string apiUrl = BuildUrl(url, apiContext);

        // req params which has the json string as key value pair and few other request parameters
//    Uri uri = BuildUriWithQueryParams(apiUrl, reqParams);
      UriBuilder uriBuilder = new UriBuilder(apiUrl);

        HttpRequestMessage reqMsg = new HttpRequestMessage(HttpMethod.Post, uriBuilder .Uri);

        HttpMultipartFormDataContent formDataContent = new HttpMultipartFormDataContent();

        // File upload
        if (files != null && files.Count > 0)
        {
            foreach (StorageFile storageFile in files)
            {
                var inputStream = await storageFile.OpenAsync(FileAccessMode.Read);
                HttpStreamContent httpStreamContent = new HttpStreamContent(inputStream);
                formDataContent.Add(httpStreamContent, "doc", storageFile.Name);
            }
        }
            foreach (KeyValuePair<string, string> keyValuePair in reqParams)
                formDataContent.Add(new HttpStringContent(keyValuePair.Value), keyValuePair.Key);
            reqMsg.Content = formDataContent;

        var response = await HttpClient.SendRequestAsync(reqMsg);//.AsTask(cts.Token);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...