模型绑定类属性的子集

时间:2019-04-15 23:55:42

标签: c# asp.net-core-webapi model-binding

我试图仅绑定来自API请求主体的类属性的子集,但不确定如何实现。如果我可以仅绑定我想接受作为输入的属性的基类,然后使用额外的属性将其强制转换为子类,则可以解决我的问题,但是如果不进行序列化/反序列化,则这是不可行的(即无法从基地对孩子)。示例类,我只想允许从[FromBody]绑定名称

public class project {
     public string id { get; set; }
     public string name { get; set; }
}

我可以在id上使用私有设置器,这是答案吗?我发现,当我在应用程序的其他位置设置自己的ID时,访问器将无法访问。谢谢。

2 个答案:

答案 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

所述使用类型转换器