次のようないくつかのパラメーターを受け入れる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
オブジェクトがリクエストの本文に配置され、その他のパラメータがクエリ文字列に配置されます。
null許容パラメータを単純に省略することはできないことをすでに発見しました。空の値を使用してクエリ文字列にそれらを配置する必要があります。したがって、null許容パラメータの値を指定したくない場合、クエリは次のようになります。
http://myserver/api/files?existingFileId=&linkFromExistingFile=true&previousTrackingId=
これは私のコントローラーメソッドと一致します。メソッドが実行されると、null許容パラメーターは実際にnull
(予想どおり)です。
ただし、への呼び出しはをModelState.IsValid
返しますfalse
。エラーを調べると、null許容パラメータの両方について不平を言っています。(モデルの他のビットにはエラーがありません)。メッセージは次のとおりです。
値が必要ですが、リクエストに含まれていませんでした。
なぜ値が必要である/存在しないと考えるのですか?確かに、(a)null許容型には値は必要ありません、そして(b)値は(ある種の)存在していました-ある意味でnullっぽいのですか?