【发布时间】:2016-12-12 02:31:07
【问题描述】:
我无法在我的 ASP.NET Core 控制器中验证由 Scaffold-DbContext 命令生成的模型。
所需/最大长度属性配置都在EF核心生成的上下文类的onModelCreating方法中。
protected override void OnModelCreating( ModelBuilder modelBuilder ) {
modelBuilder.Entity<ModelClass>( entity => {
entity.ToTable( "ModelClass", "schema" );
entity.Property( e => e.ModelClassCode )
.IsRequired()
.HasMaxLength( 30 );
我的控制器以 JSON 格式接收模型的数据,但即使我发送无效数据,ModelState.IsValid 也始终返回 true。
public IActionResult CreateModelClass( [FromBody]ModelClass modelClass ) {
// ModelState.IsValid always returns true here
我让 ModelState.IsValid 为 false 的唯一方法是向模型类添加数据注释。我想避免这种情况,因为运行脚手架命令会覆盖这些更改。
我在这里遗漏了什么吗?有没有人可以指出我的例子?我见过的和验证相关的都是使用数据注解的。
【问题讨论】:
-
我相信验证框架依赖于属性上的数据注释。所以你需要它来让模态验证工作。
-
感谢@Shyju 的回复。我希望避免模型中的数据注释,因为当我从数据库重新生成模型时它们会被覆盖。
-
您可以尽可能使用
Scaffold-DbContext来生成数据注释,而不是使用fluent api。使用以下命令行参数-a|--data-annotations Use DataAnnotation attributes to configure the model where possible. If omitted, the output code will use only the fluent API.这样Required/``MaxLength` 等将使用注释搭建脚手架,并为您提供验证支持。 -
感谢@Smit 的回复。我昨天在查看 ASP.NET 核心文档时确实遇到了
-DataAnnotations开关,并且确实有效。在这一点上,我只是好奇为什么流畅的 API 方法似乎无法验证。 -
正如@Shyju 指出的,数据验证框架依赖于注释。 Fluent API 是 EF 特有的东西。 & EF 本身不提供任何验证。
标签: validation asp.net-core-mvc entity-framework-core