Data Annotationによるバリデーション
属性でモデルを検証します。
「Data Annotationによるバリデーション」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全4レッスンが含まれています。
データアノテーション検証とは
データアノテーションは、モデルのプロパティに付けて、C# クラス内で直接検証ルールを宣言する属性です。ASP.NET Core はモデルバインディング中にこれらの属性を読み取り、受信したリクエストを自動的に検証します。
これらは System.ComponentModel.DataAnnotations 名前空間にあります。
using System.ComponentModel.DataAnnotations;
public class RegisterRequest
{
[Required]
public string Username { get; set; }
}[Required] 属性
[Required] は、プロパティが null ではないこと(既定では空文字列でもないこと)を保証します。クライアントがフィールドを省略すると、アクションが実行される前にモデル検証が失敗します。
ErrorMessage を使ってメッセージをカスタマイズできます。
public class RegisterRequest
{
[Required(ErrorMessage = "Username is required.")]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}[Range] による数値の検証
[Range] は、数値を最小値以上かつ最大値以下の範囲に制限します。int、double、decimal などで使用できます。
年齢、数量、評価など、範囲を持つ数値に使用します。
public class ProductRequest
{
[Range(1, 1000, ErrorMessage = "Quantity must be between 1 and 1000.")]
public int Quantity { get; set; }
[Range(0.01, 9999.99)]
public decimal Price { get; set; }
}[EmailAddress] によるメールアドレスの検証
[EmailAddress] は、文字列が有効なメールアドレスの形式に見えるかを確認します。[Required] と組み合わせると、フィールドが存在し、形式も正しいことを検証できます。
public class ContactRequest
{
[Required]
[EmailAddress(ErrorMessage = "Please enter a valid email.")]
public string Email { get; set; }
}文字列長の制約
[StringLength] は、テキストの最大長と、必要に応じて最小長を設定します。[MinLength] と [MaxLength] は、より簡単な代替手段です。
public class RegisterRequest
{
[Required]
[StringLength(20, MinimumLength = 3)]
public string Username { get; set; }
[MaxLength(500)]
public string Bio { get; set; }
}[RegularExpression] によるパターン照合
[RegularExpression] は、正規表現パターンに対して文字列を検証します。電話番号、郵便番号、スラッグなどの形式に適しています。
public class ProfileRequest
{
[RegularExpression(@"^[a-z0-9-]+$",
ErrorMessage = "Slug may only contain lowercase letters, digits and dashes.")]
public string Slug { get; set; }
}[Compare] による2つのフィールドの比較
[Compare] は、1つのプロパティが別のプロパティと一致することを保証します。典型的な用途は、パスワードの確認です。
public class RegisterRequest
{
[Required]
public string Password { get; set; }
[Compare(nameof(Password), ErrorMessage = "Passwords do not match.")]
public string ConfirmPassword { get; set; }
}ModelState によるエラーの報告
検証に失敗すると、ASP.NET Core はエラーを ModelState に格納します。[ApiController] を付けた API コントローラーでは、無効なリクエストに対して自動的に 400 レスポンスが返されるため、通常は手動で確認する必要はありません。
[ApiController]
[Route("api/[controller]")]
public class AccountController : ControllerBase
{
[HttpPost("register")]
public IActionResult Register(RegisterRequest request)
{
// [ApiController] already returned 400 if invalid
return Ok("Registered " + request.Username);
}
}ModelState の手動チェック
[ApiController] がない場合(MVC コントローラーなど)は、自分で ModelState.IsValid を確認し、どのように応答するかを決めます。
public IActionResult Register(RegisterRequest request)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
return Ok();
}複数のアノテーションの組み合わせ
アノテーションは積み重ねて使用できます。1つのプロパティに複数の属性を付けることができ、すべての検証に合格する必要があります。評価の順序は結果に影響しませんが、読みやすい状態を保ちましょう。
public class SignupRequest
{
[Required]
[EmailAddress]
[StringLength(254)]
public string Email { get; set; }
[Required]
[Range(18, 120, ErrorMessage = "Must be 18 or older.")]
public int Age { get; set; }
}データアノテーションでは不十分な場合
データアノテーションは、単純で宣言的なルールに適しています。しかし、プロパティ間のロジック、データベースの検索、条件付きルール(「X の場合だけ必須」など)はすぐに扱いにくくなります。そこで力を発揮するのがFluentValidationです。次に取り上げます。
クイックチェック
データアノテーションについての理解度を確認します。
まとめ
データアノテーションでは、属性として検証ルールを宣言することを学びました。[Required] は必須性、[Range] は数値の範囲、[EmailAddress] はメールアドレスの形式を検証し、さらに [StringLength]、[RegularExpression]、[Compare] も使用できます。[ApiController] を使うと、ModelState を通じて検証失敗時に自動的に 400 が返されます。複雑なルールには、次に FluentValidation を使用します。
よくある質問
「Data Annotationによるバリデーション」レッスンは無料ですか?
はい。「Data Annotationによるバリデーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全4レッスンが含まれています。
「Data Annotationによるバリデーション」で何を学びますか?
属性でモデルを検証します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Data Annotationによるバリデーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Data Annotationによるバリデーション
- FluentValidationのルール
- カスタムルールと条件付きルール
- APIへのバリデーション統合