Ich verwende Fluent Validation für meine Modelle und ich versuche, die Felder und Validierung mit Swagger abzubilden.Swagger erkennt Fluent Validierung von verschachtelten Objekten nicht
Ich habe folgendes Modell:
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; }
}
Ich habe die folgende Validierung mit Fluent Validierung gesetzt:
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");
}
}
Um Swagger verstehen Fluent Validation, habe ich diese Seite als Referenz: http://blog.yeticode.co.uk/2015/10/add-fluentvalidation-rules-to-swagger.html
Um Swagger neue Validierungen zu verstehen, macht die folgende Zeile die Magie:
schema.required.Add("DateJoined");
Swagger versteht jedoch keine Kindvalidierung wie FirstName
. Wenn ich in diesem Fall eine Datenannotation oben auf dem Feld [Required]
verwende, identifiziert Swagger sie korrekt.
Das Problem mit der von diesem Blog bereitgestellten Lösung ist die Variable Schema enthält nicht die Navigation zu DetailModel
Felder. Es enthält nur die Definition für DetailModel
.
Aber da nicht im Schema aufgeführt ist, kann ich es nicht zu den erforderlichen Feldern hinzufügen.
Hat es jemand geschafft, das zu tun?
Ich erwähnte nur die Zeile 'schema.required.Add (" DateJoined ");' als eine Möglichkeit, das Lesen aus dem Blogpost zu erleichtern. Die Validierung ist bereits vorhanden und diese Zeile lässt Swagger nur erkennen, dass DateJoined erforderlich ist. Das Problem, das ich habe, ist mit verschachtelten Objekten. –
@GustavoMichel Ich habe dich missverstanden. Haben Sie versucht, die Schlüssel "Details.FirstName", "Details.LastName" manuell im Code hinzuzufügen? Funktioniert die Validierung danach? –
Ja, ich habe das versucht, aber es hat nicht funktioniert, weil 'Details.FirstName' und' Details.LastName' nicht in der Liste der Felder 'schema.properties' enthalten sind. Nur 'Details' sind in dieser Liste. Die Validierung funktioniert gut mit FluentValidation. Mein einziges Problem ist, dass Swagger es als Pflichtfeld erkennt. –