MaxLength不起作用,ModelState.IsValid始终为true - (ASP.MVC 6)

时间:2016-05-20 05:09:43

标签: c# asp.net-core-mvc

我有一个方法具有[FromBody]参数,但如果值超过映射对象中ModelState.IsValid属性限制的值,则true会一直返回MaxLength

public class AddUserMsg
{
    [MaxLength(10)]
    public string name;
}

[HttpPost("[action]")]
public IActionResult AddUser([FromBody] AddUserMsg msg)
{
    // Always true even if the name is longer than 10 symbols
    if (ModelState.IsValid)
    {
    }
}

我认为它可以验证发布的数据。任何想法为什么不呢?

2 个答案:

答案 0 :(得分:2)

public string name;

应该使用属性而不是字段。

public string Name { get; set };

ASP.NET 5, MVC6, WebAPI -> ModelState.IsValid always returns true

答案 1 :(得分:1)

您正在寻找StringLengthAttribute。 StringLength用于ViewModel验证。来自docs:

  

StringLength属性允许您设置字符串的最大长度   属性,以及可选的最小长度。

实体框架使用

MaxLengthAttribute向数据提供者提供有关用于给定属性的适当数据类型的提示。正如您从文档中看到的那样:

  

实体框架之前未对最大长度进行任何验证   将数据传递给提供者。它取决于提供者或数据存储   验证是否合适。例如,在定位SQL Server时,   超过最大长度将导致数据异常   基础列的类型不允许存储多余的数据。