リクエストパラメータの検証(バリデーション)
リクエストとして送られてきたパラメータをチェック(検証)する方法と、実際に試してみた際に気がついたことのメモになります。
目次
- コントローラーとモデル
- 検証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();