我试图仅绑定来自API请求主体的类属性的子集,但不确定如何实现。如果我可以仅绑定我想接受作为输入的属性的基类,然后使用额外的属性将其强制转换为子类,则可以解决我的问题,但是如果不进行序列化/反序列化,则这是不可行的(即无法从基地对孩子)。示例类,我只想允许从[FromBody]绑定名称
public class project {
public string id { get; set; }
public string name { get; set; }
}
我可以在id上使用私有设置器,这是答案吗?我发现,当我在应用程序的其他位置设置自己的ID时,访问器将无法访问。谢谢。
答案 0 :(得分:1)
恕我直言,您应该应用Single Responsibility Principle为要绑定的模型创建一个新的DTO,这对于维护目的也更好。如果您开始从基类继承,那么以后如果需要更改该类的协定(例如删除不需要的属性并可能影响您拥有的子类),将面临一个巨大的问题。
现在您可以创建
class ProjectWithOnlyName
{
public string name{get;set;}
}
并将该实例作为控制器的参数传递
public void MyControllerMethod([FromBody] ProjectWithOnlyName dto)
{
....
}
我建议您执行的每个操作都具有DTO。
要更新
class ProjectWithOnlyNameForUpdateDto
{
public string name{get;set;}
}
[HttpPut]
public void CreateMethod([FromBody] ProjectWithOnlyNameForUpdateDto dto)
{
....
}
用于创建
class ProjectWithOnlyNameForCreateDto
{
public string name{get;set;}
}
[HttpPost]
public void CreateMethod([FromBody] ProjectWithOnlyNameForCreateDto dto)
{
....
}
希望这会有所帮助
答案 1 :(得分:0)
您可以按照here
所述使用类型转换器