【发布时间】:2021-04-15 12:09:42
【问题描述】:
我是 C# .Net Core 的初学者。我使用 MongoDB 来存储一些对象。为了解释我的问题,假设我在“UserController”中有两种方法:注册和获取。 当我使用注册方法时,我发送用户对象(类似的东西):
{
id: 1,
email: "test@test.com",
name: "GoodUserName",
password: "12345"
}
但是当我使用get-method时,我想隐藏密码字段,我希望得到类似的东西(没有密码):
{
id: 1,
email: "test@test.com",
name: "GoodUserName"
}
我尝试使用 BsonIgnore,
Class User
{
...
[BsonIgnore]
string password {get; set;}
...
}
但是当我使用注册方法时,密码字段为空。 我的问题是当我使用我的“获取”控制器时,响应的“用户”对象包括密码字段。请告诉我在回复时隐藏密码的最佳做法。
【问题讨论】:
-
通常,您会拥有“数据传输对象 (DTO)”并将它们映射到数据库对象(有时称为“实体”)。这样,您就可以控制要隐藏(或添加)的信息。
-
顺便说一句:我猜(并希望)这不是生产代码。你真的应该永远将纯文本密码保存到你的数据库(但这对于一系列讲座来说已经足够了)。
-
在将对象返回给客户之前,您可以轻松地将代码中的密码字段清空
-
^^ 对于映射,甚至还有一些库可以让这变得更容易(如“让您免于编写样板代码”):如 Mapster、AutoMapper ...
-
为什么不使用 .net 身份?这可以为您处理很多事情,并且仍然可以自定义。对于核心,您可以在这里查看它是什么:docs.microsoft.com/en-us/aspnet/core/security/authentication/…
标签: c# asp.net mongodb rest bson