Fluent Validationをモデルに使用しており、Swaggerを使用してフィールドと検証をマップしようとしています。私は次の検証流暢検証して設定したスワッガーはネストされたオブジェクトのFluent Validationを認識しません
public abstract class PersonModel
{
protected PersonModel()
{
DetailModel = new DetailModel();
}
public DetailModel Details { get; set; }
}
public class CustomerModel : PersonModel
{
public DateTime DateJoined { get; set; }
}
public class DetailModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
:
public class CustomerModelValidator : AbstractValidator<CustomerModel>
{
public CustomerModelValidator()
{
RuleFor(x => x.DetailModel.FirstName)
.NotEmpty().WithMessage("FirstName is required");
RuleFor(x => x.DateJoined)
.NotEmpty().WithMessage("DateJoined is required");
}
}
は、私が参照として本ウェブサイトを使用し、闊歩は流暢検証を理解するには:
私は、次のモデルを持っている http://blog.yeticode.co.uk/2015/10/add-fluentvalidation-rules-to-swagger.html
スワッガーが新しい検証を理解できるようにするには、下の行が魔法を実行します:
schema.required.Add("DateJoined");
しかし、SwaggerはFirstName
などの子の検証を理解していません。この場合、フィールド[Required]
の上にデータアノテーションを使用すると、Swaggerはそれを正しく識別します。
このブログで提供されるソリューションの問題は、変数スキーマにDetailModel
フィールドへのナビゲーションが含まれていないことです。 DetailModel
の定義のみが含まれています。
FirstName
はスキーマに記載されていないため、必須フィールドに追加することはできません。
誰かがそれを行うことができましたか?
私は、ブログ投稿からの読み上げを容易にする方法として、 'schema.required.Add(" DateJoined ");という行だけを述べました。バリデーションは既に行われており、この行ではSwaggerがDateJoinedが必要であることを認識させるだけです。私が持っている問題は、入れ子オブジェクトです。 –
@GustavoMichel私はあなたを誤解しました。 "Details.FirstName"、 "Details.LastName"というキーをコードに手動で追加しようとしましたか?それ以降の検証は機能しますか? –
はい、私はそれを試しましたが、 'Details.FirstName'と' Details.LastName'が 'schema.properties'フィールドのリストにないので動作しませんでした。そのリストには「Details」だけがあります。この検証は、FluentValidationでうまくいきます。私の唯一の問題は、Swaggerが必須フィールドとして認識していることです。 –