首页 > 解决方案 > 无法同时发布元数据和多部分。收到 400 错误请求

问题描述

我正在尝试从我的 UWP 应用上传文件并在查询参数(下面的代码)中添加一些 JSON 数据。但是,我收到了一个 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);

标签: c#.netuwp

解决方案


从查询参数中删除 JSON req 参数并添加到 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);

推荐阅读