У меня есть требование передать фильтры 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
Как передать Dictionary в MultiPartHttpRequest вместе с файлом в С# ⇐ C#
Место общения программистов C#
-
Anonymous
1732702032
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();
};
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79229137/how-to-pass-dictionarystring-string-in-multiparthttprequest-along-with-file-i[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия