ASP. NET Основная проблема WEB API с параметрами GET в методе API - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть этот контроллер

[ApiController]
    [Route("api/[controller]")]
    public class FamiliesController : ControllerBase
    {
        readonly FamilyFinanceContext db;
        public FamiliesController(FamilyFinanceContext context)
        {
            db = context;
        }


        [HttpDelete("deletefamily")]
        public async Task<ActionResult<Family>> DeleteFamilly(int id)
        {
            Family user = db.Families.FirstOrDefault(x => x.Id == id);
            if (user == null)
            {
                return NotFound();
            }
            db.Families.Remove(user);
            await db.SaveChangesAsync();
            return Ok(user);
        }
    }

после вызова https://localhost: 44373 / API / семейства / deletefamily? Id = 2 У меня есть эта ошибка - HTTP ОШИБКА 405 В теории это GET параметры должны работать. Что я не правильно сделал?

1 Ответ

0 голосов
/ 08 февраля 2020

Как заявил ESG, вы пытаетесь выполнить DELETE, поэтому вам нужно использовать глагол DELETE, а не глагол GET. По этой причине вы получаете метод 405 Not Allowed (вы не можете использовать GET для действия DELETE). Вы должны использовать такой инструмент, как PostMan (https://www.postman.com/) для создания ваших запросов DELETE, поскольку вы не можете легко сделать это просто в браузере.

Чтобы больше соответствовать Соглашение REST, вам следует немного изменить метод DELETE:

    [HttpDelete("{id}")]
    public async Task<ActionResult> DeleteFamily([FromRoute] int id)
    {
        Family user = db.Families.FirstOrDefault(x => x.Id == id);
        if (user == null)
        {
            return NotFound();
        }
        db.Families.Remove(user);
        await db.SaveChangesAsync();
        return NoContent();
    }

Затем вы бы назвали это DELETE https://localhost: 44373 / api / family / 2

Используя атрибут [HttpDelete ("{id}"]), вы перемещаете идентификатор из строки запроса в URI, что больше соответствует соглашению REST (URI представляет объект). Обычно используются параметры строки запроса для дополнительных возможностей, таких как фильтрация, сортировка и т. д. c, а не конечная точка, представляющая сам объект.

Обычно действия DELETE не возвращают содержимое, но это зависит от вас. Если вы действительно хотите вернуть пользовательский объект, затем придерживайтесь Ok (пользователь), но NoContent более типично для глагола DELETE.

...