Почему 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) значение было (вроде) присутствует - в некотором роде?