我无法弄清楚如何将服务器端DbContext
验证错误返回给客户端。我知道 Breeze 有默认验证器,可以对一些属性做出反应,例如Required
,但是所有其他属性呢?我可以为 Breeze 编写一个自定义 JavaScript 验证器,它将在客户端进行检查,但我还需要检查以确保实体在服务器端有效。
例如,应用程序需要Person
一个有效的电子邮件地址。恶意用户出现并通过客户端获取电子邮件地址,并将无法通过EmailAddress
验证器的数据发布到服务器。到目前为止,我对 Breeze 的体验是电子邮件地址将保存并且不会出现任何DbContext
实体框架错误。
假设下面的模型,获得任何实体验证错误的最佳方法是什么?
public class PeopleContext : DbContext
{
public PeopleContext()
: base("name=ConnectionString"){ }
public DbSet<Person> People { get; set; }
}
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[EmailAddress]
[Required]
public string Email { get; set; }
}
更新 1:
以下是重新创建我遇到的问题的一些说明。
- 按照说明创建“Todo”示例 ( http://www.breezejs.com/documentation/start-nuget )
在文件中添加一个新的自定义验证器
BreezeSampleTodoItem.cs
:[AttributeUsage(AttributeTargets.Property)] public class CustomValidator : ValidationAttribute { public override Boolean IsValid(Object value) { string val = (string)value; if (!string.IsNullOrEmpty(val) && val == "Error") { ErrorMessage = "{0} equal the word 'Error'"; return false; } return true; } }
使用新的自定义验证器装饰该
Description
字段:[CustomValidator] public string Description { get; set; }
当然添加正确
using
的 s (System
和System.ComponentModel.DataAnnotations
)。- 运行项目。
- 在描述字段之一中键入“错误”并保存。
这是我希望看到 Breeze 出现错误的地方,甚至DbEntityValidationException
是 Entity Framework 抛出的错误。我已经在 2 台不同的计算机上尝试过,结果相同。实体保存到数据库中,就好像没有错误一样。事实上,如果你IsValid
在自定义验证器的方法内的任何地方放置一个断点,你会看到它甚至没有被调用。