【发布时间】:2020-11-17 12:43:16
【问题描述】:
我有一个ASP.Net Core 2.1 应用程序。
下面是我的 DTO
public class Movie
{
public int Id { get; set;}
public bool IsSpecial {get; set;}
public IEnumerable<Ticket> Tickets { get; set; }
public Movie()
{
if(IsSpecial)
{
this.Tickets = new List<TicketSpecial>();
}
else
{
this.Tickets = new List<Ticket>();
}
}}}
门票(基类)
public class Ticket
{
public int Id { get; set;}
public string Name { get; set;}
public decimal price { get; set;}
}
TicketsSpecial(子/派生类)
public class TicketsSpecial : Ticket
{
public string SpecialProp1 { get; set;}
public string SpecialProp2 { get; set;}
}
WebAPI 控制器
public class MovieController : ControllerBase
{
public IActionResult Post([FromBody]Movie movie)
{
}
}
邮递员(HTTPPost 请求负载Content-Type = application/json)
{
"IsSpecial": true,
"SpecialProp1": "Mumbai Test",
}
当我通过 Postman 调用上述 API 并在 Movie ctor 上调试时,它总是会捕获 IsSpecial = false 的值和所有字段的默认值(例如字符串类型为 null)
谢谢!
【问题讨论】:
-
IsSpecial在构造过程中始终为 false,您需要将其值传递给构造函数或更改属性的 setter 以构建集合。 -
你发出的http请求是什么?
-
显示你如何通过 Postman 调用它
-
如果我是你,我不会费心创建模型类的层次结构,只需创建一个处理两种情况(标准和正常)的 Ticket 模型。
-
与创建请求的方式无关,
IsSpecial在执行if(IsSpecial)时还没有初始化
标签: c# asp.net-core-webapi asp.net-core-2.1 modelbinders