Dlaczego ModelState.IsValid nie działa dla mojej metody ApiController, która ma parametry zerowalne?

Mam metodę ApiController, która akceptuje kilka parametrów, takich jak:

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

        ...
    }

Kiedy POST na to, wstawiamFileDto obiekt w treści żądania i inne parametry w ciągu zapytania.

Odkryłem już, że nie mogę po prostu pominąć parametrów dopuszczających wartość pustą - muszę umieścić je w ciągu zapytania z pustą wartością. Tak więc moje zapytanie wygląda tak, gdy nie chcę określać wartości dla parametrów null:

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

To pasuje do mojej metody kontrolera, a kiedy metoda jest wykonywana, parametry nulllable są rzeczywiścienull (jak można się spodziewać).

jednak, wezwanie doModelState.IsValid zwracafalse, a kiedy zbadam błędy, narzeka na oba parametry, które można pominąć. (Pozostałe bity modelu nie zawierają błędów). Wiadomość brzmi:

Wymagana jest wartość, ale nie była obecna w żądaniu.

Dlaczego uważa, że ​​wartość była wymagana / nieobecna? Z pewnością (a) wartość jestnie wymagane dla wartości dopuszczalnej, a (b) wartość była (w pewnym sensie) obecna - w sposób zerowy?

questionAnswers(2)

yourAnswerToTheQuestion