ASP.NET PATCH 请求中的 WebAPI OData Delta 对象字段为空

ASP.NET WebAPI OData Delta object fields is null in PATCH request

我在 OData 支持下创建了 ASP.NET WebAPI

项目 class 有一个名为 ProjectType 的字段,声明可为空整数类型:

public class Project
{
        public string Id { get; set; }
        public string Name { get; set; }
        public int? ProjectType { get; set; }
}

我的 WebAPI 控制器:

public class LocalModelsController : ODataController
{
  public IHttpActionResult Patch([FromODataUri] string key, Delta<Project> patch)
  {   
        var projectUpdated = patch.GetEntity();
        var projectType = projectUpdated.ProjectType;

        //projectType is null here
  }
}

当我从客户端向 WebAPI 发送 PATCH http 请求(具有 BSON 内容类型格式)时,Project 对象具有正确的 Id 和 Name 值,但 ProjectType 始终为空。

但是当我将 ProjectType 字段类型的类型从 int? 更改为 double? 时,它工作正常:

public double? ProjectType { get; set; }

是 ODATA 的限制还是我遗漏了什么?

您可能只需要将 projectUpdated 转换为正确的类型。

例如

var projectUpdated = patch.GetEntity();

Project p = projectUpdated as Project;

if (p != null)
{
       var projectType = p.ProjectType;
}

我已经解决了。这只是因为我使用 BSON 格式通过 HTTP 请求传输对象。如果我改用 JSON 效果很好。不过不确定 BSON 格式有什么问题。