首页 > 解决方案 > 模型绑定类属性的子集

问题描述

我试图从 API 请求正文中仅绑定类属性的子集,我不确定如何实现这一点。如果我可以绑定到仅具有我想接受作为输入的属性的基类,然后将其强制转换为具有额外属性的子类,它将解决我的问题,但没有序列化/反序列化这不是一个选项(即不能从基地到孩子)。示例类,我只想允许从 [FromBody] 绑定名称

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

我可以在 id 上使用私人设置器,这是答案吗?我发现当我在应用程序的其他地方设置自己的 id 时,我得到了无法访问的访问器。谢谢。

标签: c#asp.net-core-webapimodel-binding

解决方案


恕我直言,您应该为要绑定的模型创建一个新的 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)
{
    ....
}

希望这可以帮助


推荐阅读