Размещать сложные объекты с формой? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующее в РЕАКТЕ:

let form = new FormData();
form.append("test",test);

for (var index = 0; index < files.length; index++) {
  var element = files[index];
  form.append('file', element);
}

axios.post('https://localhost:44371/api/default', form,'sdfdsf')
        .then((result) => {
            console.log(result);
        })
        .catch((ex) => {
            console.error(ex);
        });

И это в asp. net core web api:

[HttpPost]
public void Post(IFormCollection form,string test2)
{
    var test = form["test"];

    foreach (var file in form.Files)
    {
        UploadFile(file);
    }
}

И все работает как положено. Я могу добавить ключи в виде строк в форме и извлечь их в API. Но есть ли способ передать сложный тип с формой? Оптимальным было бы, если бы я прикрепил объект в качестве параметра к функции API. Или это ограничение, которое вы можете опубликовать при публикации формы?

1 Ответ

0 голосов
/ 05 мая 2020

есть ли в любом случае передать сложный тип с формой? Оптимальным было бы, если бы я прикрепил объект в качестве параметра к функции API.

Чтобы выполнить вышеуказанные требования, вы можете обратиться к следующему примеру кода.

На стороне клиента

let form = new FormData();
form.append("test", "testc");

for (var index = 0; index < files.length; index++) {
    var element = files[index];
    form.append('file', element);
}

form.append("childP.name", "blablahere");

axios.post('https://xxxxx/api/default', form, 'sdfdsf')
    .then((result) => {
        console.log(result);
    })
    .catch((ex) => {
        console.error(ex);
    });

Действие контроллера API

[HttpPost]
public void Post([FromForm]TestModel testModel)
{

    var test = testModel.test;

    foreach (var file in testModel.file)
    {
        UploadFile(file);
    }

    var childp_name = testModel.childP.name;

    //code logic here
    //...
}

Класс модели

public class TestModel
{
    public string test { get; set; }
    public List<IFormFile> file { get; set; }
    public ChildP childP { get; set; }
}

public class ChildP
{
    public string name { get; set; }
}

Результат теста

enter image description here

...