C# 模型绑定类属性的子集

C# 模型绑定类属性的子集,c#,asp.net-core-webapi,model-binding,C#,Asp.net Core Webapi,Model Binding,我试图从API请求体绑定类属性的一个子集,我不确定如何实现这一点。如果我可以绑定到一个只包含我想接受作为输入的属性的基类,然后将它转换为具有额外属性的子类,这将解决我的问题,但不序列化/反序列化,这不是一个选项(即不能从基类转换为子类)。示例类,我只想允许从[FromBody]绑定名称 public class project { public string id { get; set; } public string name { get; set; } } 我可以在id

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

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

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

您可以按照所述使用类型转换器

如何为要绑定、应用的模型创建新的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)
{
    ....
}

希望这有助于解决我的问题,但它确实会导致对象加倍。如果我要添加一个参数等,这两个类都需要更新。