【问题标题】:Saving Email and Phone number as encrypted strings将电子邮件和电话号码保存为加密字符串
【发布时间】:2016-11-07 07:58:22
【问题描述】:

我正在尝试将客户电子邮件和电话号码作为加密字符串保存到数据库中。显然,它在实体框架验证上失败,说不是有效的电子邮件地址或电话号码。在不影响字段验证的情况下处理这种情况的最佳方法是什么?试图用谷歌搜索,但没有找到任何地方。

模型类字段:

    [Required]
    [StringLength(256)]
    [EmailAddress]
    public string Email { get; set; }

    [StringLength(256)]
    public string Address { get; set; }

    [Required]
    [Phone]
    [Display(Name = "Phone")]
    public string PhoneNumber { get; set; }

控制器动作方法:

        if (ModelState.IsValid)
        {
            try
            {
                customer.CustomerCode = getNewCode();
                customer.PhoneNumber = CryptorEngine.Encrypt(customer.PhoneNumber, true);
                customer.Email = CryptorEngine.Encrypt(customer.Email, true);
                customer.Address = CryptorEngine.Encrypt(customer.Address, true);
                customer.AddedBy = User.Identity.Name;
                customer.AddedAt = DateTime.Now;
                db.Customers.Add(customer);
                db.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                        eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                            ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }

            return RedirectToAction("Index");
        }

输出窗口出错:

Exception thrown: 
'System.Data.Entity.Validation.DbEntityValidationException' in EntityFramework.dll
Entity of type "Customer" in state "Added" has the following validation errors:
- Property: "Email", Error: "The Email field is not a valid e-mail address."
- Property: "PhoneNumber", Error: "The Phone field is not a valid phone number."

任何帮助将不胜感激。

【问题讨论】:

  • 删除[电话]和[电子邮件地址]
  • 谢谢,将属性移动到视图模型

标签: c# asp.net-mvc entity-framework validation encryption


【解决方案1】:

您不应该直接在控制器上使用实体框架类。除了不好的做法外,它还会导致您现在看到的确切问题。

相反,创建一个单独的模型类,例如 CustomerDto,它具有您的模型验证属性,您将在控制器中使用它,并将它们映射到您的数据库类。

【讨论】:

    【解决方案2】:

    为电话号码和电子邮件地址添加两个新属性,例如 EcryptPhoneNumber 和 EncryptEmailId,它们将作为参数传递给数据库。

    customer.EcryptPhoneNumber = CryptorEngine.Encrypt(customer.PhoneNumber, true);
    customer.EncryptEmail= CryptorEngine.Encrypt(customer.Email, true);
    

    或者另一个想法是使用 Jquery 进行验证。

    谢谢。

    【讨论】:

      【解决方案3】:

      使用 viewModel 并加密您的字段,然后将它们映射到您的实体类。您可以使用自动映射器来映射或映射手册。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-05
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多