ASP . NETでのFluentValidation.ネットコア


ASP . NETでViewModelの検証を実装していますか?これまでのデータ属性を使用するNET ( CORE ) ?もしそうならば、あなたのクラスが乱雑になって、不必要に複製されたコードでいっぱいであるので、チャンスは常に不満でした.そうですか.それから今日のポストはあなたのためです.

fluentValidation
FluentValidationは、Fluent APIの形式でクラスの厳密な型検証を定義する方法です.この場合流暢なのは、関数が常に変更されたオブジェクトを返すコード構造です.この方法では、複数のメソッド呼び出しをチェーン化して、非常に読みやすいソースコードを生成できます.あなたは既にASPのような地域からこの構造に精通しているかもしれません.NETセットアップまたはLINQ.
FluentValidationは、検証規則を定義するための一般的なライブラリです.NETで利用可能なオープンソースはGitHubです.ああ、私はトピックにジャンプする前に:projects documentationは非常に良いですし、あなたの質問のほとんどのために十分以上にする必要があります.

インストールとセットアップ
FluentValidationを使用するには、まず対応するNuGetパッケージのFluentValidationをインストールする必要があります.アスピネット.その後、あなたのアプリケーションのスタートアップクラスの設定が残されています.AddFloenValidationに呼び出しを追加します.DIインフラストラクチャを正しく動作させるには、次のタフで検証を行う必要があります.
public void ConfigureServices(IServiceCollection services) {
    services.AddMvc()
        // ...
        .AddFluentValidation();

    services.AddTransient<IValidator<ClubMember>, ClubMemberValidator>();
    // ...
}
あなたが推測するように、それはもちろん非常に迅速に非常に厄介な取得するので、それを達成するために別の方法をチェックしましょう.幸いなことに、著者はまた、別の解決策を提供しました:与えられたアセンブリ内のすべてのバリデータの自動登録.これらに対する2つの要件は、publicとbとしてマークされているということです.
そのためには、次のようにAddFloentValidationに呼び出しをカスタマイズする必要があります.
.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());
これで、起動時に同じアセンブリ内に含まれているすべてのバリデータが登録されます.それを知って、我々はまっすぐに我々の最初のバリデータを定義することにジャンプすることができます.私の場合では、これはClubmemberクラスのためのものです.
public class ClubMember {
    public int Id { get; set; }
    public int MemberId { get; set; }
    public int ClubId { get; set; }
    public string Role { get; set; }
    public int Number { get; set; }
}

public class ClubMemberValidator : AbstractValidator<ClubMember> {
    public ClubMemberValidator() {
        (x => x.Role).Length(3, 25);
        RuleFor(x => x.Number).InclusiveBetween(1, 100);
        // ...
    }
}
FluentValidationで使用できる複数の定義済み検証規則があります.ただし、特定のユースケースをサポートする必要がある場合は、もちろん独自に作成することができます.検証自体が設定され、modelstateを呼び出して確認できます.コントローラアクション内のisvalid.

落とし穴
ライブラリを使うときに考慮すべきことがいくつかあります.例えば、通常のASP .DataAttributesを使用したNet Validationはまだアクティブであり、FluentValidationの後に適用されます.予期しない副作用を避けるために古いコードをきれいにするのは役に立ちます.
もう一つのポイントは、複雑なオブジェクトが自動的に階層構造の下でさらにチェックされないことです.既定で子オブジェクトを検証するバリデータを作成する場合は、オブジェクト自体または設定で指定する必要があります.これを実現するには、プロパティを使用します.
fluentValidation自体はサーバ側の検証に使用されることを意図しています.ただし、クライアント側での検証のメタデータを提供するためにも使用できます.このトピックの詳細については、上記のプロジェクトドキュメントを参照してください.

TLドクター
私の意見では、FluentValidationはASPで強く型付けされた検証規則を定義する非常に良い方法を提供します.あなたのクラスを台無しにすることなく、ネット(コア).しかし、私はまだカバーしていない多くの詳細があります.前に述べたように、プロジェクトのドキュメントは、潜在的な質問と一般的な情報に対する回答を得る非常に良い場所です.