Вы делаете неправильно несколько вещей:
public async Task<IActionResult> AddFileToTranscription([FromForm] IFormFile file)
❌ Вам не нужен атрибут [FromFile]
.
❌ Имя аргумента вашего файла file
, но у вас нетНе определяйте его при загрузке файлов в клиенте.
❌ Вам не нужно добавлять ContentDisposition
и устанавливать его как attachment
, потому что это для ответа, а не запроса!(1)
✅ Сервер:
public async Task<IActionResult> AddFileToTranscription( IFormFile file)
{
using (var sr = new StreamReader(file.OpenReadStream()))
{
var content = await sr.ReadToEndAsync();
return Ok(content);
}
}
✅ Клиент:
client.BaseAddress = new Uri("http://localhost:62337/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string filepath = @"C:\Users\uic10950\Desktop\Meeting2Text\RecordingApp\bin\mixedaudio.zip";
string filename = "mixedaudio.zip";
MultipartFormDataContent content = new MultipartFormDataContent();
ByteArrayContent fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filepath));
// ➡ ✅ important change fileContent, form-input-name, real-file-name
content.Add(fileContent, "file", filename);
HttpResponseMessage response = await client.PostAsync("api/transcriptions/recording", content);
string returnString = await response.Content.ReadAsAsync<string>();
MultipartFormDataContent.Add
метод имеет несколько перегрузок для добавления данных формы, вы должны использовать эту перегрузку :
public void Add (System.Net.Http.HttpContent content, string name, string fileName);
Вывод:
Каким бы ни был ваш аргумент IFormData
, вам нужно загружать или отправлять запросы, которыеname!
- В обычном HTTP-ответе заголовок ответа Content-Disposition является заголовком, указывающим, будет ли содержимое отображаться встроенным в браузере, чтокак веб-страница или как часть веб-страницы, или как вложение, которое загружается и сохраняется локально.