c# - 无法同时发布元数据和多部分。收到 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);
解决方案
从查询参数中删除 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);