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
devolvefalse
e 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?