我有一个接受几个参数的ApiController方法,如下所示:
// POST api/files
public HttpResponseMessage UploadFile
(
FileDto fileDto,
int? existingFileId,
bool linkFromExistingFile,
Guid? previousTrackingId
)
{
if (!ModelState.IsValid)
return Request.CreateResponse(HttpStatusCode.BadRequest);
...
}
Run Code Online (Sandbox Code Playgroud)
当我发布POST时,我将FileDto对象放在请求的正文中,并将其他参数放在查询字符串上.
我已经发现我不能简单地省略可以为空的参数 - 我需要将它们放在带有空值的查询字符串上.所以,当我不想为可空参数指定值时,我的查询看起来像这样:
http://myserver/api/files?existingFileId=&linkFromExistingFile=true&previousTrackingId=
Run Code Online (Sandbox Code Playgroud)
这与我的控制器方法匹配,并且当执行该方法时,可以为空的参数null(正如您所期望的那样).
但是,对ModelState.IsValid返回的调用false,当我检查它们时,它正在抱怨两个可以为空的参数.(模型的其他位没有错误).消息是:
值是必需的,但请求中不存在.
为什么它认为价值是必需的/不存在的?当然(a)中的值不要求可为空的,和(b)的值是(排序的)本-中的一种方式的空杂交排序?