【问题标题】:ASP.NET Web API hide property from EF/LINQ queryASP.NET Web API 隐藏 EF/LINQ 查询的属性
【发布时间】:2016-10-09 18:39:45
【问题描述】:

当 C# 是 API 时,我有一个博客项目。我正在使用 SQL Server 2016。为了连接到数据库,我正在使用 Entity Framework

这是我的 ADO.NET .edmx 图:

一个用户可能有很多帖子,一个帖子可能有很多作者(Users),一个帖子可能有几个cmet,一个用户可能有cmet。

当我请求 API 获取用户(或用户列表)时,响应如下:(Endpoint: "/api/users/1")

我想从响应中隐藏密码字段(我知道它没有经过哈希处理,但这是出于测试目的)所以我将代码更改为:

收件人:

这是使用新代码的结果:

但现在:(我在帖子数组中看到了用户(包括密码!)的详细信息!

是否有一种有效的方法可以在 C# Web API 中实现对 EF/LINQ 查询隐藏敏感数据?

谢谢。

【问题讨论】:

  • 在Users类中,可以设置密码为private
  • 那我就可以创建/更新/删除密码了吗?
  • ScriptIgnore属性放在password属性上,就不会被序列化成json了
  • 你必须首先使用代码而不是 edmx(EF 不再支持 edmx,所以如果我是你,我不会再使用它了)。
  • 附言。请发布您的代码,而不是图像。图片不能被复制,也不能被搜索引擎索引,就像你的代码一样。

标签: c# asp.net entity-framework linq asp.net-web-api2


【解决方案1】:

您可以使用数据传输对象来做到这一点。这里有关于它的好处。检查Create Data Transfer Objects (DTOs)。您可以使用 automap 自动映射。

删除循环引用(参见上一节)。

隐藏客户不应查看的特定属性。

省略一些属性以减少负载大小。

扁平化包含嵌套对象的对象图,使它们更多 方便客户。

避免“过度发布”漏洞。 (请参阅模型验证 过度发布的讨论。)将您的服务层与您的 数据库层。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多