1

这是我的用户模型的样子:

namespace Api.Models
{
    public class User
    {

        [BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
        [BsonRequired]
        public string Id { get; set; }

        [Required(ErrorMessage = "Username is required.")]
        [StringLength(20, MinimumLength=3, ErrorMessage="Username must be between 3 and 20 characters.")]
        [BsonRequired]
        public string Username { get; set; }

        [Required(ErrorMessage="Email is required.")]
        [EmailAddress(ErrorMessage="Valid email required.")]
        [BsonRequired]
        public string Email { get; set; }

        [Required(ErrorMessage = "Password is required.")]
        [StringLength(50, MinimumLength=8, ErrorMessage="Password must be between 8 and 50 characters.")]
        [BsonRequired]
        public string Password { get; set; }

        [BsonRequired]
        public string Salt { get; set; }

    }
}

我想将所有属性写入 MongoDB 数据库,并且需要这些属性。我不想做的是在我通过请求发送时公开PasswordSalt属性。

是否可以设置任何类型的数据属性来编写它,但在向任何 API 用户显示时不公开它?

4

1 回答 1

2

正确的方法是使用视图模型。不要将您的域实体传递给视图。设计满足视图特定要求的视图模型。因此,例如设计一个没有 Password 和 Salt 属性的视图模型,因为这正是该视图所需要的。然后为了简化域模型和视图模型之间的映射,您可以使用AutoMapper

如果您不想在视图模型中遵循良好实践,您仍然可以使用 Bind 属性将 POST 操作弄乱,并决定要从模型绑定中包含/排除哪些属性。例如:

[HttpPost]
public ActionResult SomeAction([Bind(Exclude="Password,Salt")]User user)
{
    // at this stage the Password and Salt properties will always be null =>
    // they will never be bound from the request even if the user attempts to 
    // forge an HTTP request and include them
    ...
}
于 2012-09-11T15:36:27.773 回答