我有一个接受多个参数的 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
,当我检查错误时,它抱怨两个可为空的参数。(模型的其他位没有错误)。消息是:
需要一个值,但请求中不存在该值。
为什么它认为一个值是必需的/不存在的?当然(a)可空值不需要一个值,并且(b)一个值(某种)存在 - 以某种方式为空?