У меня есть метод ApiController, который принимает несколько параметров, например:
// POST api/files
public HttpResponseMessage UploadFile
(
FileDto fileDto,
int? existingFileId,
bool linkFromExistingFile,
Guid? previousTrackingId
)
{
if (!ModelState.IsValid)
return Request.CreateResponse(HttpStatusCode.BadRequest);
...
}
Когда я отправляю сообщение POST, я помещаю объект FileDto
в тело запроса и другие параметры в строке запроса.
Я уже обнаружил, что я не могу просто опустить нулевые параметры - мне нужно поместить их в строку запроса с пустым значением. Таким образом, мой запрос выглядит так, когда я не хочу указывать значение для параметров с нулевым значением:
http://myserver/api/files?existingFileId=&linkFromExistingFile=true&previousTrackingId=
Это соответствует моему методу контроллера, и когда метод выполняется, нулевые параметры действительно null
(как и следовало ожидать).
Однако вызов ModelState.IsValid
возвращает false
, и когда я просматриваю erorrs, он жалуется на оба параметра с нулевым значением. (Другие биты модели не имеют ошибок). Сообщение:
Требуется значение, но не указана в запросе.
Почему он думает, что требуется значение/нет? Разумеется, (a) значение не требуется для значения NULL, и (b) значение было (вроде) присутствующим - в нулевом виде пути?