0Pricing
C# Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Data Annotationによるバリデーション
  2. FluentValidationのルール
  3. カスタムルールと条件付きルール
  4. APIへのバリデーション統合
← C# Academyに戻る