我创建了一个MVC项目,其中包括对所有类的CRUD操作,使用默认控制器和支持这些操作的视图页面。
我的新任务是为特定的类制作一些API控制器,到目前为止我已经正确完成了。 问题是当请求get请求时,返回整个对象及其与其他类的所有连接(这是正确的!),但是说我有这个类:
public class VM{
public int Id { get; set; }
public string MacAddress { get; set; }
public string IpAddress { get; set; }
public DateTime? CreateDate { get; set; }
public string PrivateKey { get; set; }
public int AppId { get; set; }
public int CompanyId { get; set; }
}
我不希望用户获取privateKey或ID。我希望用户能够得到所有其他信息,但不应发送某些信息。
实现这一目标的最佳做法是什么?是否会成为一个没有那些特定班级成员的新班级? 说明天我想添加另一个不会发送的数据成员,我是否必须进行另一个课程?
我假设在将对象发送回客户端之前将这些特定数据成员的数据更改为null不是正确的答案,是吗?
答案 0 :(得分:1)
将它们设置为null确实不是正确的答案。
但通常你希望你的应用程序尽可能保持一致,因此,对于类似的请求,你应该返回相同类型的字段/对象。
因此,一些(2或3)DTO(数据传输对象)就足够了。 如果项目规模较小,或者您只是觉得自己疯了,可以随时将它们转换为匿名对象,如下所示:
List<VM> VMs = VMRepo.GetAll();
vms.ConvertAll(vm => new {vm.MacAddress, vm.IpAddress});
或者甚至给出自定义名称:
vms.ConvertAll(vm=> new {MAC= vm.MacAddress, IP= vm.IpAddress});