Я изучаю учебник MicroSoft по : создание веб-API с помощью ASP.NET Core MVC .В нем пошагово объясняется, как создать HttpGet / HttpPost / HttpPut и т. Д. И как их вызывать.
Моя проблема заключается в следующем: я не могу вызвать HttpPut
Демонстрационный проект представляет собой базу данных с элементами Todo.
TodoController содержит функции для создания / получения / обновления / удаления TodoItem.
HttpGet и HttpPost работают должным образом.У меня проблемы с обновлением существующего элемента с использованием HttpPut.
class TodoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
class TodoController : ControllerBase
{
// Get all Todo items
[HttpGet]
public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems() {...}
// get Todo item by Id
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id){...}
// Create a Todo item and return it with filled Id:
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todo) {...}
// The followingmethod is never called:
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todo)
{
... // breakpoint never hit
}
}
Для теста я использую PostMan .С Почтальоном я могу HttpGet и HttpPost.Например, HttpPost:
Post to: https://localhost:44305/api/todo
Raw JSON body:
{
"name":"get up in the morning",
"isComplete":true
}
Как и ожидалось, элемент Todo добавляется и возвращается с заполненным идентификатором:
{
"id": 3,
"name": "get up in the morning",
"isComplete": true
}
Также возможно HttpGet элемент Todo с идентификатором 3.HttpPut не работает, функция вообще не вызывается:
PUT: https://localhost:44305/api/todo/3
Raw JSON body:
{
"id": 3,
"name": "changed1",
"isComplete": false
}
Почтальон получает следующие необработанные данные JSON:
{
"": [
"The input was not valid."
]
}
Странно то, что если я изменюопределение метода, функция вызывается с тем же вводом JSON:
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id)
{
... // breakpoint hit
}
Очевидно, мне нечего обновлять.
Я думаю, что параметр в HttpPutAttribute неверен.Что я должен изменить, чтобы получить пут?