Загрузка файла Asp.net WebApi 2 с объектом Model - PullRequest
0 голосов
/ 10 февраля 2019

Project is (.net Framework 4.6.1 в Azure) Кто-нибудь знает, есть ли способ использовать контроллер для принятия и загрузки файла, и объекта модели (Json) в одном запросе.Клиентское приложение должно загрузить файл, а также метаданные о файле, и мы хотели бы сделать это одним запросом, если это возможно.

Я подумал о 2 возможностях:

  1. Разместите файл (ы) и отдельные поля модели (модель плоская), как если бы это была веб-форма, поэтому создайте объект моей модели из формы вручную.(а-ля https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-2)
  2. Опубликовать файл (ы) и объект модели как другой файл json и десериализовать в мой объект модели как часть пользовательского MultipartMemoryStreamProvider

AmМне не хватает варианта? TIA

1 Ответ

0 голосов
/ 12 февраля 2019

Я бы попробовал просто добавить файл в модель или создать ViewModel с данными и файлом в нем.Из-за привязки данных, если ваши поля ввода в клиенте имеют одно и то же имя, эти данные будут сопоставлены с объектом во время запроса.

Модель:

public class yourModel
{
    public string name {get;set;}
    ...
    //other data

    public IFormFile yourFile {get;set;} //your file
    ...
}

Контроллер:

[Route("YourRoute")]
[HttpPost]
public async Task<WhateverYouWantToReturn> YourAction(yourModel model)
{
     //set a breakpoint here to see if your fields populated
     ...
     //do something with your model
     ...
     return WhateverYouWantToReturn;
}

Просмотр: Пока имена ваших полей ввода совпадают с именами ваших полей в вашем объекте, онидолжна карта.

<form enctype="multipart/formdata" method="post" action="/your/route">
     <input type="text" name="name"/>
     <input type="hidden" name="somesHiddenField" value="yourValue" />
     ... <!-- Whatever other fields you need. -->
     <input type="file" name="yourFile"/>
     <input type="submit" value="Submit" />
</form>
...