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
格式有什么问题。
我在 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
格式有什么问题。