ASP. NET Базовый веб-API с интегрированным по умолчанию контроллером Entity Framework Core путает размещение и отправку? - PullRequest
1 голос
/ 25 мая 2020

Я создал проект ASP. NET Core Web API с Entity Framework Core и создал новый «контроллер API с действиями, использующий Entity Framework», и, хотя это замечательно, я чувствую, что PUT по умолчанию и POST поменяны местами и хотели бы получить обратную связь по этому поводу:

    // 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 должен предоставлять объект для добавления в базу данных, а PATCH должен быть используется для обновления существующего объекта. Но из того, что я вижу в этом коде, PUT используется для обновления уже существующего элемента с указанием идентификатора, который уже должен существовать, а POST просто загружает новый ресурс без указания какого-либо идентификатора, как я себе представляю PUT должно работать.

Я ошибаюсь или мне следует поменять HttpPut на HttpPatch и HttpPost на HttpPut?

1 Ответ

0 голосов
/ 25 мая 2020

Вы можете использовать PUT для создания или обновления ресурса, URL-адрес которого вам известен. Итак, рассмотрите URL-адрес /user/123, если в этой позиции существует объект, PUT просто обновит данные, в противном случае запрос создаст нового пользователя по пути /user/123.

Если вы wi sh для полного обновления объекта (т.е. всех его полей) вы используете PUT, если вы хотите обновить одно поле ресурса, go для PATCH.

В то время как метод POST используется для добавления нового ресурс, URL которого вам неизвестен. Таким образом, ваш URL-адрес запроса будет /user, поскольку вы не знаете цель.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...