FluentValidationをテストするための簡単なコードを書き留めようとしている中級プログラマですが、手動でバリデーターを呼び出してその結果をModelState .AddToModelState検証にエラーがあると認識するためにModelState.IsValidを取得できません。どこかで統合が失われていますか?FluentValidationを使用している場合、ModelState.IsValidは常にtrueと評価されます
これは私のバリューモデルで、2つのプリセット値を持つ文字列配列です。
using FluentValidation.Attributes;
using Playground2.Validators;
namespace Playground2.Models
{
[Validator(typeof(ValueValidator))]
public class Value
{
public string[] values = { "value1", "" };
}
}
これは5〜10文字の2つの値を探しているバリデータです。
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は常に、trueとして評価しています。
モデルバインディングを介して(要求)パラメータだけを見ると思います。 none( 'Get()')がないので、要求は有効です。 – Caramiriel