Почему ModelState.IsValid терпит неудачу для моего метода ApiController, который имеет обнуляемые параметры?

У меня есть метод ApiController, который принимает несколько параметров, например, так:

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

        ...
    }

Когда я отправляю сообщение об этом, я помещаюFileDto объект в теле запроса и другие параметры в строке запроса.

Я уже обнаружил, что не могу просто пропустить обнуляемые параметры - мне нужно поместить их в строку запроса с пустым значением. Итак, мой запрос выглядит так, когда я не хочу указывать значение для параметров, допускающих значение NULL:

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

Это соответствует моему методу контроллера, и когда метод выполняется, параметры обнуляемые действительноnull (как вы ожидаете).

HoweverПризыв кModelState.IsValid возвращаетсяfalseи когда я проверяю ошибки, они жалуются на оба обнуляемых параметра. (Другие биты модели не имеют ошибок). Сообщение:

A value is required but was not present in the request.

Почему он считает, что значение было обязательным / не присутствует? Конечно, (а) значениеnot требуется для обнуляемого, и (b) значение было (вроде) присутствует - в некотором роде?

Ответы на вопрос(2)

Ваш ответ на вопрос