【问题标题】:ModelState.IsValid always evaluating as true when working with FluentValidation使用 FluentValidation 时,ModelState.IsValid 始终评估为真
【发布时间】:2017-10-16 06:52:56
【问题描述】:

我是一名初级程序员,试图编写一些简单的代码来测试 FluentValidation,但没有手动调用验证器并使用 .AddToModelState 将结果添加到模型状态,我无法让 ModelState.IsValid 识别有验证中的错误。我是否在某处缺少集成?

这是我的值模型,只是一个包含两个预设值的字符串数组。

using FluentValidation.Attributes;
using Playground2.Validators;

namespace Playground2.Models
{
    [Validator(typeof(ValueValidator))]
    public class Value
    {
        public string[] values = { "value1", "" };
    }

}

这是我的验证器,正在寻找 5 到 10 个字符之间的两个值。

using FluentValidation;
using Playground2.Models;

namespace Playground2.Validators
{
    public class ValueValidator : AbstractValidator<Value>
    {
        public ValueValidator()
        {
            RuleFor(x => x.values[0]).Length(5, 10);
            RuleFor(x => x.values[1]).Length(5, 10);
        }
    }
}

在 ValuesController 中,我只是创建一个值对象并运行检查以查看它在输出之前是否通过验证。

using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Mvc;
using Playground2.Models;
using System.Collections.Generic;

namespace Playground2.Controllers
{
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        // GET api/values
        [HttpGet]
        public IEnumerable<string> Get()
        {
            var value = new Value();

            if (!ModelState.IsValid)
            {
                return new string[] { "Not valid" };      
            }
            else
            {
                return value.values;
            }         
    }

但在运行时,ModelState.IsValid 总是评估为真,尽管输入值的信息默​​认是无效的。

【问题讨论】:

  • 我认为它只会通过模型绑定查看(请求)参数。由于没有(Get()),请求有效。

标签: c# fluentvalidation


【解决方案1】:

FluentValidation 遵循 MVC/HTML 关于GETs 和POSTs 的约定。在这种情况下,不需要对页面的初始 GET 进行任何验证,因为用户不一定会执行任何操作。相反,他们要求页面开始做某事——他们还没有开始提供数据。

一旦用户填写了信息,惯例是使用&lt;button&gt; 或&lt;input type="submit"/&gt; 以HTML &lt;form&gt; 提交数据,然后通过HttpPost 标记的方法将数据提交给控制器。此时验证已触发,您将能够正确询问ModelState.IsValid。

【讨论】:

  • 非常感谢!所以我只是没有把它放在正确的地方进行测试,我必须努力设置一个后期测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多