Объект FormData из React не конвертируется в бэкэнд C# в модель - PullRequest
4 голосов
/ 17 февраля 2020

У меня есть приложение, созданное с помощью React Native, и бэкэнд API находится в. NET C#. Я пытаюсь отправить некоторые данные из внешнего интерфейса в бэкэнд

reactjs

let formData = new FormData();
formData.append('token', token)
formData.append('document', document)
formData.append('file', file);

Где token - строка, file - какой-то файл, но document - это объект с такими параметрами, как Id и Name. Поэтому на бэкэнде я получаю данные, подобные этим

C#

[HttpPost]
[AllowAnonymous]
public ActionResult SendDocument(string token, DocumentMobile document, HttpPostedFileBase file)
{
    //do thins
}

Проблема в том, что объект document не преобразуется в модель DocumentMobile, как раньше используя FormData, и все реквизиты внутри равны нулю.

Как это сделать?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вам необходимо связать каждое свойство вашего класса, вот как работает механизм связывания моделей, он ищет имя свойств вашего класса. Так что в зависимости от структуры вашего document класса, в вашем случае должно работать одно из следующих:

formData.append('Id', document.Id)
formData.append('Name', document.Name)

Или это:

formData.append('document', {Id: document.Id, Name: document.Name})

Или:

formdata.append("document[id]", document.Id)
formdata.append("document[name]", document.Name)

А для файла вы можете использовать что-то вроде этого:

formData.append('file', {uri: file, name: 'image.jpg', type: 'image/jpeg'}) 
0 голосов
/ 17 февраля 2020

По умолчанию привязка модели получает данные в виде пар ключ-значение, предполагая, что оба являются строками. Файлы являются исключением.

Вы можете передавать пары ключ-значение следующим образом:

formData.append('document.title', document.title)

В качестве альтернативы, вы можете создать привязку пользовательской модели. Как это описано в это так .

...