OData的Controller影响HTTP verb中UPDATE和Patch时候,如果使用Updated(entity)的写法,则该Request只返回status code,并不会返回更新后的结果。
示例代码如下:
[Authorize]
public async Task<IActionResult> Patch([FromODataUri] int key, [FromBody] Delta<FinanceAccount> coll)
{
if (!ModelState.IsValid)
{
// Error handling
}
var entity = await _context.FinanceAccount.FindAsync(key);
if (entity == null)
{
return NotFound();
}
// Patch it
coll.Patch(entity);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!_context.FinanceAccount.Any(p => p.ID == key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(entity);
}
其实这并非OData API本身的问题,是调用者必须在header中显式要求:
let headers: HttpHeaders = new HttpHeaders();
headers = headers.append('Content-Type', 'application/json')
.append('Accept', 'application/json')
.append('Prefer', 'return=representation');
是为之记。
Alva Chien
2020.06.20