相关疑难解决方法(0)

为什么我的ApiController方法具有可为空参数的ModelState.IsValid失败?

我有一个接受几个参数的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)的值是(排序的)本-中的一种方式的空杂交排序?

model-binding asp.net-web-api

16
推荐指数
2
解决办法
4304
查看次数

标签 统计

asp.net-web-api ×1

model-binding ×1