2017.9.20
2020.1.7

リクエストパラメータの検証(バリデーション)

リクエストとして送られてきたパラメータをチェック(検証)する方法と、実際に試してみた際に気がついたことのメモになります。

目次

  • コントローラーとモデル
  • 検証NG時のエラーメッセージの取得
  • 参考リンク

コントローラーとモデル

モデルにはチェックしたい項目の属性を付加します。


using System.ComponentModel.DataAnnotations;

public class Example
{
    public int Id { get; set; }

    [Required]
    [StringLength(20)]
    [RegularExpression("^[a-zA-Z0-9]+$", ErrorMessage = "Invalid Name")]
    public string Name { get; set; }

    [Required]
    [Range(0, 999)]
    public int? SortNo { get; set; }
}

あとは用意したモデルをコントローラーの引数にセットするだけです。


public class ExampleController : Controller
{
    public IActionResult Update([FromBody] Example example)
    {
        if (ModelState.IsValid)
        {
            // チェックOK
        }
        return Json(example);
    }
}

モデルの「SortNo」はNull許容(int?)で宣言しています。これをプリミティブ型(int)にした場合、Requiredに設定した「SortNo」というフィールドが送られてきたデータになくても検証OKとなってしまうので注意が必要です。

検証NG時のエラーメッセージの取得

検証NGとなった場合のエラーメッセージは以下のように取得します。


var errors = ModelState.Values.SelectMany(v => 
        v.Errors.Select(e => e.ErrorMessage)
    ).ToList();

参考リンク

ASP.NET Core】関連記事