👏

コンソールでもモデル検証を行いたい!

2023/04/19に公開

ASP.NET(Core)で便利なモデル検証ですがコンソールでもモデル検証を行いたいという欲求があるかもしれません。
コンソールに限らず、ASP.NET Coreのテスト、自由な場所でモデル検証をしたいなどこの方法でできるかと思います。

前提:.NET 6以上

まず、モデルを以下のように定義しました。

TestModel.cs
using System.ComponentModel.DataAnnotations;

namespace ValidateTest
{
    internal class TestModel
    {
        [Required(ErrorMessage = "名前は必ず入力してください。")]
        [StringLength(10, MinimumLength = 3, ErrorMessage = "名前は3文字から10文字入力してください。")]
        public string? Name { get; set; }
        [Required]
        [EmailAddress]
        public string? Email { get; set; }
        [Phone]
        public string? Phone { get; set; }
        public string? Address { get; set; }
        public string? City { get; set; }
        public string? State { get; set; }
        public string? Zip { get; set; }
    }
}

そして、以下のようにモデル検証を行います。

Program.cs
using System.ComponentModel.DataAnnotations;
using ValidateTest;

TestModel model = new TestModel();
model.Name = "haaa";
model.Email = "foo@hoge.com";

List<ValidationResult> errors = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(model, new ValidationContext(model), errors, true);

if (isValid)
{
    Console.WriteLine("Valid");
}
else
{
    Console.WriteLine("Invalid");
    foreach (var error in errors)
    {
        Console.WriteLine(error.ErrorMessage);
    }
}

これを実行すると以下のようになります。

モデル検証が成功したようです。

model.Nameを3文字未満にして実行すると以下のようになります。

モデル検証が失敗し、文字列長の制約での失敗ということが分かります。
以上のような方法でより多様なところでモデル検証が行え便利になるかと思います。

Discussion