5

Ich habe ein View-Modell, das IValidatableObject implementiert und auch über mehrere Validierungsattribute verfügt. Wenn ich versuche, eine Aktion auf meinem ApiController aufzurufen, wird nur die Attributvalidierung durchgeführt. Unterstützt die ASP.NET-Web-API IValidatableObject nicht? Was ist die Alternative für eine komplexe Validierung, die nicht durch ein einzelnes Attribut dargestellt werden kann?Unterstützt die ASP.NET-Web-API IValidatableObject?

Edit: Irgendwo entlang der Linie, ich muss etwas verduftet haben. Die Validierung begann auf mysteriöse Weise wie erwartet zu funktionieren. Sieht aus wie IValidatableObject wird definitiv standardmäßig unterstützt.

Antwort

1

Noch nicht versucht IValidatableObject auf Webapi, aber es sollte gemäß der Dokumentation der Validierung Provider für DataAnnotations (DataAnnotationsModelValidatorProvider) unterstützt auch IValidatableObject Validierung unterstützt werden. Siehe hier: http://msdn.microsoft.com/en-us/library/system.web.http.validation.providers(v=vs.108)

Wie auch immer, Sie können auch ValidationAttribute auf Objektebene verwenden, die Sie verwenden können, um eine Klasse zu dekorieren ... Es ist nicht so einfach wie IValidatableObject, sollte aber funktionieren.

0

Ab sofort wird IValidatableObject unterstützt.

4

Mit Web API 2.1 (Microsoft.AspNet.WebApi nugget 5.1.x) habe ich erlebt, dass die Validate-Methode von IValidatableObject nicht aufgerufen wird, wenn eines der Validierungsattribute ungültig ist. Daher müssen alle Validierungsattribute, die auf die Eigenschaften Ihrer Klasse angewendet wurden, zuerst als gültig übergeben werden, bevor die Validate-Methode der Klasse aufgerufen wird.

Wenn Sie beispielsweise eine Eigenschaft mit der RequiredAttribute haben und keinen Wert in dieses Feld eingeben, wird Ihre Implementierung der Validate-Methode von IValidatableObject nicht aufgerufen. Obwohl technisch kein Fehler, erwartete ich, dass die Validate-Methode jedes Mal aufgerufen wird, wenn ich sie validiere.

+0

Ich denke, Sie meinen WebAPI 2? Das ist in der Regel mit MVC 5 verpackt. Wie auch immer, was Sie erlebt haben, ist das erwartete Verhalten. Ich habe dotPeek verwendet, um dieses Verhalten zu überprüfen. Es gibt eine if-Anweisung irgendwo in einer der Klassen. Super widerlich. –

+0

Sie haben Recht, ich bezog mich auf Web API 2, aber ich verweise auf die Paketversion nuget. Ich habe diesen Teil meiner Antwort geklärt. Danke für die Rückmeldung. –

Verwandte Themen