我有一个方法具有[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)
{
}
}
我认为它可以验证发布的数据。任何想法为什么不呢?
答案 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时, 超过最大长度将导致数据异常 基础列的类型不允许存储多余的数据。