我有一个控制器:
public class PostsController : ODataController
{
public IHttpActionResult Post(Post post) {}
public IHttpActionResult Put([FromODataUri] int key, Delta<Post> patch) {}
}
Post
实体只有两个字段:int Id
和string Content
。
以下json
消息在POST操作中正常工作:
{
content: "dasdasd678678678"
}
但是,PUT操作拒绝请求并返回400错误:
{
"error":{
"code":"","message":"The request is invalid.","innererror":{
"message":"The parameters dictionary contains an invalid entry for parameter 'patch' for method 'System.Web.Http.IHttpActionResult Put(Int32, System.Web.OData.Delta`1[Post])' in 'NWeb.Controllers.API.PostsController'. The dictionary contains a value of type 'Entity.Post', but the parameter requires a value of type 'System.Web.OData.Delta`1[Entity.Post]'.","type":"","stacktrace":""
}
}
}
答案 0 :(得分:1)
PUT操作应如下所示
public IHttpActionResult Put([FromODataUri] int key, Post post) {}
delta<Entity>
应该像这样使用PATCH
public IHttpActionResult Patch([FromODataUri] int key, Delta<Post> post)
PUT和PATCH都用于更新实体,但PUT需要更新实体的完整有效载荷,而PATCH只需要增量信息。