簡體   English   中英

ASP.NET 核心 Web API 與實體框架核心默認腳手架 Z594C103F2C6E04C3DAZ8AB05E 混淆 put?

[英]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 HttpPatchHttpPost 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM