来自 React 的 FormData 对象不会在后端 C# 上转换为模型

FormData object from React doesnt convert on backend C# to model

我有使用 React Native 制作的应用程序,后端 API 使用 .NET C#。 我正在尝试从前端向后端发送一些数据

反应

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

其中 token 是一个字符串,file 是一些文件,但是 document 是一个带有 IdName 等参数的对象。所以在后端我收到这样的数据

C#

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

问题是对象 document 没有转换成 DocumentMobile 模型,就像以前不使用 FormData 那样,里面的所有 props 都是空的。

如何操作?

您需要绑定 class 的每个属性,这就是模型绑定器的工作方式,它正在寻找 class 的属性名称。因此,取决于您的 document class 的结构,以下其中一项应该适用于您的情况:

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'}) 

默认情况下,模型绑定以键值对的形式获取数据,假设两者都是字符串。文件除外。

你可以像这样传递键值对

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

或者,您可以构建自定义模型活页夹。就像this SO.

中描述的那样