【发布时间】:2013-10-10 08:10:20
【问题描述】:
我已经为我的数据库创建了一个 ADO.NET 模型。 使用 CRUD(实体框架并使用我创建的 ADO.NET 实体模型)创建了一个新控制器。
在我的数据库中,我有一个简单的用户表。表中的密码行将保存使用 SimpleCrypto (PBKDF2) 加密的用户密码。
在我的 ADO.NET Users.cs 模型中,我添加了以下验证:
[Required]
[DataType(DataType.Password)]
[StringLength(20, MinimumLength = 6)]
[Display(Name = "Password")]
public string Password { get; set; }
这适用于浏览器中的 jQuery 并进行验证。 但是在我的控制器中,我正在加密密码,然后密码字符串的长度将超过 20 个字符。
var crypto = new SimpleCrypto.PBKDF2();
var encryptedPass = crypto.Compute(user.Password);
user.Password = encryptedPass;
user.PasswordSalt = crypto.Salt;
_db.Users.Add(user);
_db.SaveChanges();
这给了我“一个或多个实体的验证失败。”-错误。
我可以将用户复制到“var newUser”,然后在那里设置所有属性,但在这种情况下是否有更简单的方法绕过模型验证?
编辑:如果我删除模型中密码道具的验证,那么一切正常。所以是验证给了我错误,因为我将密码从 6-20 长度字符更改为 +100 长度字符,因为控制器中的加密。
编辑:插入此问题的完整控制器部分。
[HttpPost]
public ActionResult Create(Users user)
{
if (!ModelState.IsValid)
{
return View();
}
if (_db.Users.FirstOrDefault(u => u.Email == user.Email) != null)
{
ModelState.AddModelError("", "User already exists in database!");
return View();
}
var crypto = new SimpleCrypto.PBKDF2();
var encryptedPass = crypto.Compute(user.Password);
user.Password = encryptedPass;
user.PasswordSalt = crypto.Salt;
_db.Users.Add(user);
_db.SaveChanges();
return RedirectToAction("Index", "User");
}
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
标签: c# asp.net-mvc entity-framework asp.net-mvc-4