1

Gegeben Ich habe ein Mitarbeiter-Modell mit einem Nullable-GenderIDASP.NET Web API 2.2 Modell Bindung Kurzschlüsse individuelle Modellvalidierung

public class Employee 
{   
    public int? GenderID { get; set; }  
} 

Und eine benutzerdefinierte Fluent Prüfungsregel auf GenderID mit FluenValidation

RuleFor(x=> x.GenderID).NotNull().WithMessage("Please provide a valid Gender"); 

Wenn ich POST ein Mitarbeiter an den folgenden Endpunkt mit einer NULL GenderID

Dann der Service gibt eine Validierung zurück Zusammenfassung wie erwartet.

[HttpPost("Employee/Create")] 
    public IActionResult Create([FromBody]Employee employee) 
    { 
     try 
     {    
      if (!ModelState.IsValid) 
      { 
       // return validation summary (code omitted for brevity) 
      } 

      var result = _respository.CreateEmployee(employee);    

      return Ok(); 
     } 
    } 

Wenn ich Mitarbeiter Modell ändern Nicht-Nullable-GenderID

public class Employee 
{   
    public int GenderID { get; set; }  
} 

haben dann den Dienst liefert 400 Bad Request Antwort ohne benutzerdefinierte Validierungs Verarbeitung. Die Validierungszusammenfassung muss an die Benutzeroberfläche gebunden sein.

Der einzige Grund dafür, dass GenderID als Nullwert zulässig ist, besteht darin, dass die Validierungszusammenfassung aus benutzerdefinierten Validatoren erstellt werden kann.

Wie kann ich die benutzerdefinierte Validierung anwenden, ohne dass alle Modelleigenschaften als Nullwert festgelegt werden müssen?

Antwort

0

Die schlechte Anfrage, die Sie erhalten, denke ich, ist wegen des Fehlers, der null GenderId in nicht nullable Int umwandelt. Steht nicht mit einer fließenden Validierung in Zusammenhang. Ist meine Meinung, wenn Sie in der Anfrage erwarten, eine Null GenderId erhalten Sie sollten die Eigenschaft GenderId Nullwert und lassen Sie den Fehler in seiner Regel fließend verwalten. Wenn Sie der Meinung sind, dass die Anfrage immer eine nicht null GenderId enthält, dann machen Sie GenderId nicht NULL-fähig. Eine Laufzeitausnahme sollte ausgelöst werden, wenn die GenderId, von der erwartet wird, dass sie immer nicht null ist, stattdessen null ist.

+0

Ja Ich habe den Grund bereits erklärt, aber ich versuche, ein Programmiermodell in WebAPI zu finden, das mir erlaubt, Befehle zu erstellen, die für akzeptable Werte repräsentativer sind. Die generierte Dokumentation, die meine API begleitet, ist irreführend, wenn ich erwähne, dass GenderId NULL-fähig sein kann. – puri