[英]ASP.NET Core Web API with Entity Framework Core default scaffolded controller confuses put and post?
I created an ASP.NET Core Web API project with Entity Framework Core and scaffolded a new "API controller with actions, using Entity Framework" and, while it's wonderful, I get the feeling the default PUT
and POST
methods are swapped and would like some feedback on事情:
// PUT: api/Items/5
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
[HttpPut("{id}")]
public async Task<IActionResult> PutItem(long id, Item Item)
{
if (id != Item.Id)
{
return BadRequest();
}
_context.Entry(Item).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ItemExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/Items
[HttpPost]
public async Task<ActionResult<Item>> PostItem(Item Item)
{
_context.Items.Add(Item);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetItem), new { id = Item.Id }, Item);
}
private bool ItemExists(long id)
{
return _context.Items.Any(e => e.Id == id);
}
據我所知, PUT
應該提供要添加到數據庫的 object,而PATCH
應該用於更新現有的 object。 但是從我在這段代碼中看到的PUT
被用來更新一個已經存在的項目,指定一個必須已經存在的 id,而POST
只是上傳一個新資源,沒有指定任何 id,我想象一個PUT
應該如何工作。
我錯了還是應該將HttpPut
HttpPatch
和HttpPost
HttpPut
?
您可以使用 PUT 創建或更新您知道其 URL 的資源。 因此,如果在 position 中存在 object,則考慮 URL 為/user/123
,PUT 將簡單地更新數據,如果不存在/user/123
1 路徑將創建一個新用戶/1。
如果您希望完全更新 object(即其所有字段),則使用 PUT,如果您想更新資源的單個字段 go 用於 PATCH。
而 POST 方法用於添加您不知道其 URL 的新資源。 所以你請求 URL 將是/user
因為你不知道目標。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.