【发布时间】: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