模型绑定了 class 个属性的子集
Model bind a subset of class properties
我正在尝试从 API 请求主体中仅绑定 class 属性的一个子集,我不确定如何实现这一点。如果我可以绑定到一个基础 class 只有我想作为输入接受的属性然后将它转换为 child class 具有额外的属性它会解决我的问题但没有 serializing/deserializing 这不是一个选项(即不能从 base 转换为 child)。示例 class,我只想允许从 [FromBody]
绑定名称
public class project {
public string id { get; set; }
public string name { get; set; }
}
我可以在 id 上使用私有 setter,这是答案吗?我发现当我在应用程序的其他地方自己设置 id 时,我得到了无法访问的访问器。谢谢。
您可以按照说明使用类型转换器here
恕我直言,您应该为要绑定的模型创建一个新的 DTO,应用 Single Responsibility Principle,这也更利于维护。如果您开始从基 [=29=] 继承,如果您需要更改那个 class 的契约,您将在以后面临一个巨大的问题,例如删除您不需要的属性并且可能会影响子class你有。
现在您可以创建
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)
{
....
}
希望对您有所帮助
我正在尝试从 API 请求主体中仅绑定 class 属性的一个子集,我不确定如何实现这一点。如果我可以绑定到一个基础 class 只有我想作为输入接受的属性然后将它转换为 child class 具有额外的属性它会解决我的问题但没有 serializing/deserializing 这不是一个选项(即不能从 base 转换为 child)。示例 class,我只想允许从 [FromBody]
绑定名称public class project {
public string id { get; set; }
public string name { get; set; }
}
我可以在 id 上使用私有 setter,这是答案吗?我发现当我在应用程序的其他地方自己设置 id 时,我得到了无法访问的访问器。谢谢。
您可以按照说明使用类型转换器here
恕我直言,您应该为要绑定的模型创建一个新的 DTO,应用 Single Responsibility Principle,这也更利于维护。如果您开始从基 [=29=] 继承,如果您需要更改那个 class 的契约,您将在以后面临一个巨大的问题,例如删除您不需要的属性并且可能会影响子class你有。
现在您可以创建
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)
{
....
}
希望对您有所帮助