PATCH请求

时间:2016-04-04 13:43:52

标签: c# asp.net-mvc asp.net-web-api asp.net-web-api-odata

我创建了ASP.NET WebAPI OData支持。

Project类有一个名为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始终为null。

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

public double? ProjectType { get; set; }

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-2)

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

例如

var projectUpdated = patch.GetEntity();

Project p = projectUpdated as Project;

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