.NET MultipartFormDataContent не отправляет имя файла в заголовке Content-Disposition? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть программа на C # (.NET 4.5), которая использует MultipartFormDataContent для отправки данных на веб-сервер. Файл добавляется с этим кодом:

FileStream stream = new FileStream(fPath, FileMode.Open, FileAccess.Read);
content.Add(new StreamContent(stream), "file0", fPath);

Эта версия MultipartFormDataContent.Add имеет следующие параметры:

public void Add(HttpContent content, string name, string fileName);

Эта версия метода Add задокументирована здесь . Официальные директивы MDN для заголовков Content-Disposition задокументированы здесь . Реальность: когда запрос поступает на сервер, часть формы имеет следующие заголовки:

{'name': 'Content-Disposition', 'value': 'form-data', 'params': {}}

Оба name и filename отсутствуют в заголовках! Если я использую двухпараметрическую версию метода Add:

FileStream stream = new FileStream(fPath, FileMode.Open, FileAccess.Read);
content.Add(new StreamContent(stream), fPath);

, то заголовок поступает на сервер, например:

{'name': 'Content-Disposition', 'value': 'form-data', 'params': {'name': 'c:\\temp\test.txt'}}

Другими словами: двухпараметрическая версия устанавливаетНазвание поля правильно. Версия с тремя параметрами не только забывает посылать параметр filename, но также испаряет параметр name.

Для сравнения, это то, что я вижу, когда я ВЫСТАВЛЯЮ аналогичные данные multipart / form с веб-страницы с помощью Firefox:

{'name': 'Content-Disposition', 'value': 'form-data', 'params': {'name': 'file', 'filename': 'test.txt'}}
{'name': 'Content-Type', 'value': 'text/plain', 'params': {}}

Я что-то не так делаю? Действительно ли это ошибка в .NET / C #? Мне действительно нужно знать имя файла на стороне сервера, и оно должно быть совместимым с другими запросами, отправленными из других браузеров. Поэтому я не могу просто добавить дополнительные заголовки и отправить туда имя файла. Он должен быть совместим с другими браузерами. Как я должен отправить имя файла из C #?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...