Ich habe das Problem reproduziert, das ich in einem brandneuen MVC-Web-API-Projekt habe.
Dies ist der Standardcode mit einer leichten Änderung.
%Vor% Wenn Sie zu http://localhost/api/values/5?something=123
gehen, funktioniert das gut und isValid ist true
.
Wenn Sie zu http://localhost/api/values/5?something=
gehen, dann ist isValid false
.
Das Problem, das ich habe, ist, dass das ModelState.IsValid einen Validierungsfehler mit dem Hinweis "A value is required but was not present in the request."
Das ModelState-Wörterbuch sieht auch so aus:
mit zwei Einträgen für something
, eine Nullable, von der ich nicht sicher bin, ob sie signifikant ist oder nicht.
Irgendeine Idee, wie ich das beheben kann, so dass das Modell gültig ist, wenn nullwertfähige Parameter weggelassen oder als null bereitgestellt werden? Ich verwende Modellvalidierung innerhalb meiner Web-API und es bricht es, wenn jede Methode mit einem nullbaren Parameter Modellfehler erzeugt.
Es scheint, dass das Standardbindungsmodell NULL-Typen nicht vollständig versteht. Wie in der Frage zu sehen ist, gibt es drei Parameterfehler anstelle der erwarteten zwei.
Sie können dies umgehen mit einem benutzerdefinierten NULL-Modellbinder:
Modellbinder
%Vor%Verwendung
%Vor%Angepasst von der asp.net Seite: Ссылка für das weitere Lesen und eine alternative Methode, um es auf der Ebene der Klasse (Controller) und nicht pro Parameter einzustellen.
Dies behandelt die drei gültigen Szenarien:
%Vor% Geben Sie zuerst "etwas" als null an. Alles andere (zB ?something=x
) gibt einen Fehler.
Wenn Sie die Signatur in
ändern %Vor% (dh = null
entfernen), dann müssen Sie den Parameter explizit angeben, dh /test/5
ist keine gültige Route, es sei denn, Sie optimieren auch Ihre Routen.
Tags und Links asp.net-mvc asp.net-web-api model-binding