我來自Ruby on Rails API背景,但我目前正在研究.NET C#WebAPI。我熟悉C#和.NET webforms。.NET API更新包含ID
我試圖設置一個PUT請求,將更新數據庫中的記錄。腳手架的方法覆蓋所有的字段,而我只想簡單地更新通過PUT傳遞的字段。我嘗試用下面的代碼:
// PUT: api/Users/5
[ResponseType(typeof(void))]
public IHttpActionResult PutUser(string id, User user)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
User userToUpdate = db.Users.Where(u => u.id == id).FirstOrDefault();
if (userToUpdate == null)
{
return NotFound();
}
db.Entry(userToUpdate).CurrentValues.SetValues(user);
try
{
db.SaveChanges();
}
catch (DbUpdateException)
{
if (UserExists(id))
{
return Conflict();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
然而,該方法對db.SaveChanges()
失敗,因爲它不能覆蓋「身份證」,這是一個關鍵。 PUT請求是content-type: application/json
和JSON下面是:
{
"preferredEmailUpdates":"true"
}
這需要所有領域的工作,並接受空條目。所以下面也是有效的,並且應該用空值更新現場電話。
{
"preferredEmailUpdates":"true",
"phone":null
}
如何在不更新密鑰的同時更新這些值?
如果您不想設置所有值,則不能使用CurrentValues.SetValues(),則必須單獨複製每個字段。 – 2015-02-09 21:27:23