【问题标题】:MaxLength does not work, ModelState.IsValid always true - (ASP.MVC 6)MaxLength 不起作用,ModelState.IsValid 始终为真 - (ASP.MVC 6)
【发布时间】:2016-09-17 05:25:57
【问题描述】:

我有一个具有[FromBody] 参数的方法,但如果值长于映射对象中MaxLength 属性的限制,它ModelState.IsValid 会继续返回true

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)
    {
    }
}

我认为它应该验证发布的数据。任何想法为什么它没有?

【问题讨论】:

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


    【解决方案1】:
    public string name;
    

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

    public string Name { get; set };
    

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

    【讨论】:

    • 谢谢。切换到属性解决了这个问题。
    【解决方案2】:

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

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

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

    Entity Framework 之前没有对最大长度进行任何验证 将数据传递给提供者。这取决于提供者或数据存储 验证是否合适。例如,针对 SQL Server 时, 超过最大长度将导致数据异常 基础列的类型将不允许存储过多的数据。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多