我试图从客户端获取值到ODataV4补丁方法。但它没有成功。它始终从客户端获取空值。以下是我的代码,
[HttpPatch]
[EnableQuery]
public IHttpActionResult Patch(int key, Delta<EmployeeDetail> patch)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var entity = _db.EmployeeDetails.Find(key);
patch.Patch(entity);
_db.SaveChanges();
return Updated(entity);
}
规格:OData Version 4.0. Part 1: Protocol Plus Errata 03 8.2.8.7偏好返回=表示和返回=最小 在OData中,return = representation或return = minimal被定义为与POST,PUT或PATCH数据修改请求一起使用,而不是用于流属性或Action Request。
如果Preference
标头不存在,则在.Net实现中默认采用return=minimal
,从而产生204 No Content
响应。
您应该确保客户端请求在您期望响应数据的方案中具有Preference
或Prefer
标头,或者您可以修改您的修补程序处理程序以使用备用默认值:
[HttpPatch]
[EnableQuery]
public IHttpActionResult Patch(int key, Delta<EmployeeDetail> patch)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var entity = _db.EmployeeDetails.Find(key);
patch.Patch(entity);
_db.SaveChanges();
// Return content by default
// Disable this by sending in header { Prefer: "return=minimal" }
if (!this.Request.Headers.Any(k => k.Key.Equals("prefer", StringComparison.OrdinalIgnoreCase) || k.Key.Equals("preference", StringComparison.OrdinalIgnoreCase)))
this.Request.Headers.Add("Prefer", "return=representation");
return Updated(entity);
}
注意:对于此解决方案中的所有请求,
Prefer
标头尚未进行硬编码,只有那些未指定标头的请求,这样用户请求仍然可以在需要时操作响应。
Prefer
的值在OData v3的早期版本中有所不同,在ODataLIb的v4的.Net实现的早期版本中,您会发现一些文档说明Prefer头需要值“content”或“return = content” ......这些解决方案不再有效。