我试图从客户端获取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);
}
答案 0 :(得分:0)
规格:OData Version 4.0. Part 1: Protocol Plus Errata 03
8.2.8.7首选项return = representation和return = minimum
在OData中,将return = representation或return = minimal定义为与POST,PUT或PATCH数据修改请求一起使用,而不是用于流属性或操作请求。
如果没有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
标头并未针对所有请求进行硬编码,只有那些未指定标头的请求才被硬编码,这样,如果需要,用户请求仍然可以操纵响应。 / p>
Prefer
的值在OData v3的早期版本中以及在ODataLIb中的v4的.Net实现的早期版本中是不同的,您会发现一些文档指出Prefer头需要一个“ content”值”或“ return = content” ...这些解决方案不再起作用。