Warum schlägt ModelState.IsValid für meine ApiController-Methode mit nullwertfähigen Parametern fehl?

Ich habe eine ApiController-Methode, die verschiedene Parameter akzeptiert, wie zum Beispiel:

    // POST api/files
    public HttpResponseMessage UploadFile
    (
        FileDto fileDto,
        int? existingFileId,
        bool linkFromExistingFile,
        Guid? previousTrackingId
    )
    {
        if (!ModelState.IsValid)
            return Request.CreateResponse(HttpStatusCode.BadRequest);

        ...
    }

Wenn ich darauf poste, lege ich dieFileDto Objekt im Hauptteil der Anforderung und die anderen Parameter in der Abfragezeichenfolge.

Ich habe bereits festgestellt, dass ich die nullwertfähigen Parameter nicht einfach weglassen kann - ich muss sie in die Abfragezeichenfolge mit einem leeren Wert einfügen. Meine Abfrage sieht also so aus, wenn ich keinen Wert für die nullfähigen Parameter angeben möchte:

http://myserver/api/files?existingFileId=&linkFromExistingFile=true&previousTrackingId=

Dies entspricht meiner Controller-Methode, und wenn die Methode ausgeführt wird, sind die nullfähigen Parameter tatsächlichnull (wie Sie es erwarten würden).

jedoch, der Anruf zuModelState.IsValid kehrt zurückfalse, und wenn ich die Fehler untersuche, beschwert es sich über beide nullbaren Parameter. (Die anderen Bits des Modells haben keine Fehler). Die Nachricht lautet:

Ein Wert ist erforderlich, war jedoch in der Anforderung nicht vorhanden.

Warum glaubt es, dass ein Wert erforderlich / nicht vorhanden war? Sicher ist (a) ein Wertnicht erforderlich für eine Nullable, und (b) ein Wert war (irgendwie) vorhanden - auf eine null-ish Art und Weise?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage