【问题标题】:How can I assign json properties from my frontend to multiple backend models in my API?如何将 json 属性从我的前端分配给 API 中的多个后端模型?
【发布时间】:2020-03-11 14:51:42
【问题描述】:

我有一个像这样发布到 API 控制器的 React 组件:

onSubmit={async values => {
    await new Promise(resolve => setTimeout(resolve, 500));
    axios({
        method: "POST",
        url: "/educationalgames/api/acceptentry",
        data: values
    });
    alert(JSON.stringify(values, null, 2));
}}

当我点击提交时,我看到了它找到的值:

{
    "eligiblePlayers": [],
    "teamName": "FalconOne",
    "teamEmail": "fc@coma.edu",
    "trainer": "",
    "department": "Physics",
    "researchType": "Meta",
    "numOfStudents": 50,
    "currentState": true
}

以上数据是来自我的 c# 后端 API 中不同模型的混合属性。

teamNameteamEmailtrainer 属于我的 team.cs 模型。

eligiblePlayersdepartment属于department.cs模型。

researchTypenumOfStudentscurrentState 属于我的 research.cs 模型。

我的问题是,我不知道如何翻译这些数据,以便我的 API 控制器可以读取它并将正确的值分配给匹配的模型属性。

到目前为止,我的 c# 控制器中有这个:

[HttpPost]
public async Task<ActionResult> AcceptEntry([FromBody] ???)

我有点不知所措。

有办法吗?

谢谢!

【问题讨论】:

  • 您可以将所有模型包装在一个单独的视图模型中,如下所示:stackoverflow.com/questions/39185634/…
  • 只需为 API 创建一个新模型。无论如何,您的模型不一定与您的后端模型直接相关。
  • @DavidG 但如果前端的属性与我的模型不匹配,它们最终将如何写入数据库?谢谢
  • 就像我说的,您的 api 模型不一定与您用于数据库的模型相同。在两者之间写一个层,在两者之间进行转换。或者使用 AutoMapper 之类的库。

标签: c# asp.net-core-mvc asp.net-core-webapi


【解决方案1】:

teamName、teamEmail 和 trainer 属于我的 team.cs 模型。

eligiblePlayers,department属于department.cs模型。

researchType、numOfStudents 和 currentState 属于我的 research.cs 型号。

为什么不在应用中创建通用模型?

public class CommonModel {
  public string teamName {get; set;} 
  teamEmail, 
  eligiblePlayers, 
  department, 
  researchType, 
  numOfStudents, 
  currentState
}

然后,在您的控制器中:

[HttpPost]
public async Task<ActionResult> AcceptEntry([FromBody] CommonModel model) {

 var team = new Team() {
   teamName = model.teamName,
   ...
 }
 var department = new Department() {
   eligiblePlayers = model.eligiblePlayers,
   ...
 }
}

【讨论】:

  • 哦,我明白了,POST 会自动将值放入 CommonModel 模型中吗?
  • 仅当您来自 React 的值对象与后端的 CommonModel 类具有相同的结构时。可能您的值对象是一个包含所有枚举参数的 json。 Net Core 会将接收到的 json 映射到你的类中(本例中为 CommonModel)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多