Dlaczego ModelState.IsValid nie działa dla mojej metody ApiController, która ma parametry zerowalne?
Mam metodę ApiController, która akceptuje kilka parametrów, takich jak:
// POST api/files
public HttpResponseMessage UploadFile
(
FileDto fileDto,
int? existingFileId,
bool linkFromExistingFile,
Guid? previousTrackingId
)
{
if (!ModelState.IsValid)
return Request.CreateResponse(HttpStatusCode.BadRequest);
...
}
Kiedy POST na to, wstawiamFileDto
obiekt w treści żądania i inne parametry w ciągu zapytania.
Odkryłem już, że nie mogę po prostu pominąć parametrów dopuszczających wartość pustą - muszę umieścić je w ciągu zapytania z pustą wartością. Tak więc moje zapytanie wygląda tak, gdy nie chcę określać wartości dla parametrów null:
http://myserver/api/files?existingFileId=&linkFromExistingFile=true&previousTrackingId=
To pasuje do mojej metody kontrolera, a kiedy metoda jest wykonywana, parametry nulllable są rzeczywiścienull
(jak można się spodziewać).
jednak, wezwanie doModelState.IsValid
zwracafalse
, a kiedy zbadam błędy, narzeka na oba parametry, które można pominąć. (Pozostałe bity modelu nie zawierają błędów). Wiadomość brzmi:
Wymagana jest wartość, ale nie była obecna w żądaniu.
Dlaczego uważa, że wartość była wymagana / nieobecna? Z pewnością (a) wartość jestnie wymagane dla wartości dopuszczalnej, a (b) wartość była (w pewnym sensie) obecna - w sposób zerowy?