C# 我是否必须为每个控制器创建一个新的对象类才能在asp.NETCore中接收json?
伙计们。我只想问一个关于asp.net核心控制器中json传输的问题 我知道如果我想像这样读jsonC# 我是否必须为每个控制器创建一个新的对象类才能在asp.NETCore中接收json?,c#,asp.net,json,asp.net-core,asp.net-core-webapi,C#,Asp.net,Json,Asp.net Core,Asp.net Core Webapi,伙计们。我只想问一个关于asp.net核心控制器中json传输的问题 我知道如果我想像这样读json { FirstName: "Zhen", LastName: "Wang" } 在request.body中,我需要将其绑定到如下对象: public class Person { public string FirstName { get; set; } public string LastName { get; set; } } public class Person
{
FirstName: "Zhen",
LastName: "Wang"
}
在request.body中,我需要将其绑定到如下对象:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PersonController : ApiController
{
[HttpPost]
public Person Index([FromBody]Person person)
{
return person;
}
}
但是,如果json中不仅有一个人,还有一栋建筑,比如:
{
Person: {
FirstName: "Zhen",
LastName: "Wang"
},
Building:{
Address:"Willis Street"
}
}
我是否必须构建PersonAndBuilding才能从request.body接收person和building数据
public class PersonAndBuilding
{
public Person Person { get; set; }
public Building Building { get; set; }
}
public class PersonController : ApiController
{
[HttpPost]
public Person Index([FromBody]PersonAndBuilding personAndBuilding )
{
return personAndBuilding.Person;
}
}
我觉得这很奇怪,因为这意味着我必须为程序中的每个POST控制器构建一个新类
谁能告诉我一些想法吗?不,你可以这样做:
public class PersonController : ApiController
{
[HttpPost]
public Person Index(Person Person, Building Building)
{
return Person;
}
}
这取决于在传递json之前如何序列化它 您发布的数据将以其中一种方式传输,但正文/表单或URL(或两者)是最常见的。请求正文的内容通常只能读取一次,这就是为什么每个参数只能有一个FromBody属性 在向WebAPI发送数据或从WebAPI接收数据时,通常使用DTO(数据传输对象)。DTO负责精确地处理所需的数据,而不会产生不必要的数据库垃圾或不需要/不希望公开的字段 在这个场景中,是的,您将需要一个专门包含一栋建筑和一个人的类。为了简单起见,您可以在同一类/文件中定义DTO,或者为了更优雅、更有条理的解决方案,可以在./DTOs/或./Models/DTOs/中定义DTO 另一种方法是修改REST结构,以便Person对象由Id标识,这样您的路由看起来像
/api/Person/{personId}
。然后您的方法签名可以看起来像
[HttpPost("{personId}")]
public IActionResult Index([FromBody] Building building, [FromRoute] int personId) {
var person = ctx.Persons.Single(p => p.Id == personId);
//you have a building and person.
}
不完全确定,但您应该能够使用单个
Person
属性创建父类;父类名称应该无关紧要;并一起排除构建
类/属性。如何发送json?用什么方法?我试过了。它不起作用。我不确定我做这件事的方式是否正确。此外,如果没有[frombody],即使只有一个参数Person,它也无法工作。您到底是如何传递数据的?