尝试在数据库中存储哈希数据时获得"EntityValidationError"



我正在尝试使用实体框架在 ASP.net 中创建注册表单。注册工作正常,无需尝试散列数据,但是当我尝试散列数据时,出现以下错误:"实体验证错误"。

加密类

public class Encrypt
{
    public static string GetMD5Hash(string input)
    {
        using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) {
            byte[] b = System.Text.Encoding.UTF8.GetBytes(input);
            b = md5.ComputeHash(b);
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            foreach (byte x in b)
            {
                sb.Append(x.ToString("x2"));
            }
            return sb.ToString();
        }
    }
}

public class CustomPasswordHasher : IPasswordHasher
{
    public string HashPassword(string password)
    {
        return Encrypt.GetMD5Hash(password);
    }
    public PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
    {
        if (hashedPassword == HashPassword(providedPassword))
        {
            return PasswordVerificationResult.Success;
        }
        else
        {
            return PasswordVerificationResult.Failed;
        }
    }
}

我尝试加密数据的方法

[HttpPost]
    public ActionResult Register(CustomUser user)
    {
        CustomPasswordHasher cph = new CustomPasswordHasher();
        var hashedpw = cph.HashPassword(user.Password);
        user.Password = hashedpw;
        using (DBModelEntities dbModel = new DBModelEntities())
        {
            if (dbModel.CustomUsers.Any(x => x.Email == user.Email))
            {
                ViewBag.DuplicateMessage = "Email already in use";
                return View("Register", user);
            }
            dbModel.CustomUsers.Add(user);
            dbModel.SaveChanges();
        }
        ModelState.Clear();
        ViewBag.SuccesMessage = "Succes";
        return View("Register", new customUser());
    }

和我的自定义用户模型类

public partial class CustomUser
{
    public int UserID { get; set; }
    [Required(ErrorMessage = "Verplicht")]
    public string Email { get; set; }
    [Required(ErrorMessage = "Verplicht")]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Required(ErrorMessage = "Verplicht")]
    [DataType(DataType.Password)]
    [DisplayName("Confirm password")]
    [Compare("Password")]
    public string ConfirmPassword { get; set; }
    public string LoginErrorMessage { get; set; }
}

希望有人能帮我解决这个问题!

提前感谢!

尝试获取确切的错误消息

 catch (DbEntityValidationException dbEx)
    {
        foreach (var validationErrors in dbEx.EntityValidationErrors)
        {
            foreach (var validationError in validationErrors.ValidationErrors)
            {
                Trace.TraceInformation("Property: {0} Error: {1}", 
                                        validationError.PropertyName, 
                                        validationError.ErrorMessage);
            }
        }
    }

首先感谢您的帮助。我想通了,我散列了我的第一个密码,但没有我的确认密码。因此,这两个密码不相等,我的应用程序阻止将其写入数据库。

最新更新