c# - 模型绑定类属性的子集
问题描述
我试图从 API 请求正文中仅绑定类属性的子集,我不确定如何实现这一点。如果我可以绑定到仅具有我想接受作为输入的属性的基类,然后将其强制转换为具有额外属性的子类,它将解决我的问题,但没有序列化/反序列化这不是一个选项(即不能从基地到孩子)。示例类,我只想允许从 [FromBody] 绑定名称
public class project {
public string id { get; set; }
public string name { get; set; }
}
我可以在 id 上使用私人设置器,这是答案吗?我发现当我在应用程序的其他地方设置自己的 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)
{
....
}
希望这可以帮助
推荐阅读
- r - R - 列列表上的 Dplyr
- java - Java中的字符串到32位整数,默认值比异常
- javascript - Ajax在单个请求中加倍GET数据?
- swift - Swift Type Eraser - 创建协议数组
- dask - 使用 dask 诊断单机核外计算的 MemoryError
- python - Python 列联表
- python - 将字符串转换为嵌套数组 - PySpark
- node.js - 文件夹访问 node_modules 的 npm 权限错误
- javascript - SVG 图像不会在 Internet Explorer 11 的 echarts 工具箱中呈现
- pandas - 使用 sklearn 进行 PCA 预测和错误