Por que o ModelState.IsValid falha no meu método ApiController que possui parâmetros anuláveis?

Eu tenho um método ApiController que aceita vários parâmetros, da seguinte forma:

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

        ...
    }

Quando eu POST a isso eu estou colocando oFileDto objeto no corpo da solicitação e os outros parâmetros na string de consulta.

Eu já descobri que não posso simplesmente omitir os parâmetros anuláveis ​​- eu preciso colocá-los na seqüência de consulta com um valor vazio. Então, minha consulta se parece com isso quando não quero especificar um valor para os parâmetros anuláveis:

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

Isso corresponde ao meu método controlador, e quando o método é executado, os parâmetros anuláveis ​​são de fatonull (como você esperaria).

Contudo, a chamada paraModelState.IsValid devolvefalsee quando eu examino o erorrs ele está reclamando sobre ambos os parâmetros anuláveis. (Os outros bits do modelo não possuem erros). A mensagem é:

Um valor é obrigatório, mas não estava presente na solicitação.

Por que acha que um valor foi necessário / não presente? Certamente (a) um valor énão necessário para um anulável, e (b) um valor foi (tipo de) presente - em uma espécie nula de uma maneira?

questionAnswers(2)

yourAnswerToTheQuestion