Как передать Dictionary в MultiPartHttpRequest вместе с файлом в С#C#

Место общения программистов C#
Ответить
Anonymous
 Как передать Dictionary в MultiPartHttpRequest вместе с файлом в С#

Сообщение Anonymous »

У меня есть требование передать фильтры Dictionary в качестве параметра в MultiPartHttpRequest. файл загружается, но фильтры обнуляются. Если кто-нибудь может помочь мне правильно отправить словарь.
ниже приведен мой код для отправки запроса. Документ загружается правильно, но фильтры всегда пусты. прошу помощи в решении проблемы.
private async Task SendMultiPartHttpRequest(string url, Dictionary headers, NameValueCollection values, Dictionary files)
{
string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
// The first boundary
byte[] boundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
// The last boundary
byte[] trailer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

// Create the request and set parameters
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 100000;
request.ReadWriteTimeout = 100000;
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = "POST";
request.Headers.Add("Accept", "*/*");
request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
request.Headers.Add("Connection", "keep-alive");
//request.Headers.Add("Keep-Alive", "36000");

// Get request stream
Stream requestStream = await request.GetRequestStreamAsync();

if (headers != null && headers.Any())
{
foreach (var key in headers.Keys)
{
request.Headers.Add(key, headers[key]);
}
}

if (values != null)
{
foreach (string key in values.Keys)
{
// Write item to stream
byte[] formItemBytes = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}", key, values[key]));
await requestStream.WriteAsync(boundaryBytes, 0, boundaryBytes.Length);
await requestStream.WriteAsync(formItemBytes, 0, formItemBytes.Length);
}
}

Dictionary filters = new Dictionary
{
{ "IsConfidential", "true" },
{ "IsArchived", "false" }
};

// Add Filters if provided
if (filters != null && filters.Any())
{
// Serialize the Filters dictionary into a JSON string
string filtersJson = JsonConvert.SerializeObject(filters);
byte[] filtersBytes = Encoding.UTF8.GetBytes(
$"Content-Disposition: form-data; name=\"Filters\"\r\n\r\n{filtersJson}");

// Write the boundary and Filters data
await requestStream.WriteAsync(boundaryBytes, 0, boundaryBytes.Length);
await requestStream.WriteAsync(filtersBytes, 0, filtersBytes.Length);
}

if (files != null && files.Any())
{
foreach (string key in files.Keys)
{
int bytesRead = 0;
byte[] buffer = new byte[2048];
byte[] formItemBytes = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n", "DataFile", key));
await requestStream.WriteAsync(boundaryBytes, 0, boundaryBytes.Length);
await requestStream.WriteAsync(formItemBytes, 0, formItemBytes.Length);

MemoryStream memoryStream = files[key];

while ((bytesRead = memoryStream.Read(buffer, 0, buffer.Length)) != 0)
{
// Write file content to stream, byte by byte
await requestStream.WriteAsync(buffer, 0, bytesRead);
}
}
}

// Write trailer and close stream
await requestStream.WriteAsync(trailer, 0, trailer.Length);
requestStream.Close();

using (StreamReader reader = new StreamReader((await request.GetResponseAsync()).GetResponseStream()))
{
return await reader.ReadToEndAsync();
};
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ith-file-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»