我试图从API请求体中仅绑定类的属性的子集,我不确定如何实现这一点。如果我可以绑定到只有我想要接受的属性作为输入的基类,那么将它转换为具有额外属性的子类,它将解决我的问题,但没有序列化/反序列化,这不是一个选项(即不能从基地到孩子)。示例类,我只想允许从[FromBody]绑定名称
public class project {
public string id { get; set; }
public string name { get; set; }
}
我可以在id上使用私有的setter,这是答案吗?我发现当我在应用程序的其他地方设置id时,我得到了无法访问的访问器。谢谢。
恕我直言,您应该为要绑定的模型创建一个新的DTO,应用Single Responsibility Principle,并且还可以更好地用于维护目的。如果您开始从基类继承,那么如果您需要更改该类的合同(如删除不需要的属性并且可能影响您拥有的子类),则稍后您将面临一个巨大的问题。
现在你可以创建了
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)
{
....
}
希望这可以帮助
您可以使用here描述的类型转换器