【发布时间】:2013-11-15 12:49:42
【问题描述】:
我将模型保存在模型程序集中,将 DTO 类保存在 DTO 程序集中。两者都在 WebAPI 项目中被引用并在那里创建映射。 WPF 客户端仅引用 DTO 程序集。
我的实体有一个“Id”标识属性,并且我将访问修饰符设置为 internal,以便仅在模型程序集中设置 id(由 EF6 支持)。甚至 DTO 中的 Id 都设置为 internal。
问题是当DTO到达客户端时,Id为0。我需要将可访问性设置为public吗?如果客户端更改 id 并保存实体怎么办?这会导致问题。
还有其他选择吗?
【问题讨论】:
-
您只能将 getter 公开...顺便说一句,如果有人更改 dto 中的 id,当您保存或更新时,我看不到问题 - 这将是另一个实体。您将检查该 ANOTHER 实体的业务规则和权限。
-
也许我解释的有点不清楚。例如,您有 User{Id = 1, Name = "Ivan"} 和 User{Id=2, Name="Piotr"}。有人将第一个实体的 ID 更改为 2 并提交更新。您的业务层从 ID = 2 的 DB 实体获取,并尝试将名称更改为 Ivan。现在,允许或拒绝此更改是您的业务规则:权限等。永远不要信任用户输入,只信任服务器端 - 检查服务器端用户提交的所有内容。
-
就在这一刻,WPF 和 WebApi 共享同一个类,但它们不共享该类的实例。 WebApi 获取对象的序列化版本,由您决定如何将其附加到真实数据。 DTO - 简单的信封。
-
有没有办法给Id属性添加一个属性,让客户端不能修改?
-
如果客户端根本不使用 WPF 客户端怎么办?会直接调用你的web api吗?
标签: c# asp.net-web-api dto