У меня есть контроллер, который принимает как IFormFile
, так и объект (класс с именем Document
), используя данные формы.
Это контроллер:
[HttpPost]
public async Task<IActionResult> Post(IFormFile file, [FromForm] Document document, CancellationToken token = default)
{
...
}
Вот как выглядит класс Document
:
public class Document
{
public Guid DocumentId { get; set; }
public string Name { get; set; }
public DocumentType DocumentType { get; set; } = DocumentType.Unsorted;
public Dictionary<string, string> Metadata { get; set; } = new Dictionary<string, string>();
}
И это код, который POST
s передает данные указанному контроллеру:
using (var multipartContent = new MultipartFormDataContent())
{
multipartContent.Add(new StringContent(document.DocumentId.ToString()), FormDataKeys.DocumentId);
multipartContent.Add(new StringContent(document.DocumentType.ToString()), FormDataKeys.DocumentType);
multipartContent.Add(new StreamContent(file), FormDataKeys.File, document.Name);
using (var apiResult = await _httpClient.PostAsync("api/documents", multipartContent, token))
{
var content = await apiResult.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<StoreDocumentResult>(content);
}
}
Это работает, оба IFormFile
и свойства параметра [FromForm] Document
в контроллере заполняются при отправке запроса POST.Только я не знаю, как мне заполнить Metadata
свойство Document
?Как я могу передать Dictionary<string, string>
в MultipartFormData
?