Web APIで複数のプロパティに対してバリデーションをかけたい

以前のプロジェクトでやったこと。

ASP.NET CoreのWeb APIでデータクラスを受け取った際にValidationをやりたい。そういうケースは当然あり、ASP.NET Coreにも検証機能が備わっています
ASP.NET Coreに任せると[Required]属性などを付与したプロパティでValidationをかけることができますが、複数のValidation条件の中で一つNGを検出したらそこで処理が中断されるため、1回のリクエストに対する検証項目が1つだけになってしまう。

マスタの登録画面で保存ボタンを押した際など、1度のリクエストで同時に複数の項目へのValidationを行いたいという状況がありました。

次のことをやっていました。

  1. 検証用Attributeクラスを作る。
    Required、Range、大小比較の小さいほう、大きいほうなどを作りました。
  2. 検証対象のデータクラスのプロパティに検証用Attributeを付与。
  3. 自前の抽象クラス Validatable を作り、検証対象のデータクラスはこれを継承させる。
  4. Validatableクラスは void Validate() メソッドを持ち、呼び出されれば検証用Attributeの付与されたプロパティに対し全チェックを行う。
  5. チェック結果に1つ以上問題があれば、検証エラーのリストを乗せた自作Validation例外をスロー
  6. ExceptionFilterを自前で実装し、Validation例外を受けて検証エラーのリストを乗せたエラーレスポンスを作って返す
  7. Controllerでは受け取ったデータクラスに対し Validate()メソッドを呼び出すことで検証を行う

悪いプラクティスを含んでいる可能性もありますのでご注意(ご指摘ただければ幸いです)。
ソースはそのうち追加するかも。