Не удается получить HTTP-запрос PUT для работы в Asp.Net Core.
Я пытаюсь обновить запись в "игровой" таблице. Тем не менее, мой put-запрос в ASP.net, кажется, никогда не срабатывает, и я не могу понять, почему.
Это контроллер в ASP.net:
[Route("game/{update.GameID}")]
[HttpPut]
public IActionResult updateGame([FromBody]Game update)
{
var result = context.Games.SingleOrDefault(g => g.GameID == update.GameID);
if (result != null)
{
result = update;
context.SaveChanges();
}
return Created("", result);
}
И это код, который я использую в Angular:
url:string;
constructor(private _http: HttpClient) {
this.url = "https://localhost:44359/api/v1/"
};
putGame(id:number, game:Game){
return this._http.put(this.url + "game/" + id, game);
}
Редактировать 1: у меня есть список GET-запросов, которые все прекрасно работают. Это только PUT-запрос, который терпит неудачу.
3 ответа
Если вы используете PUT
запросить вам нужно добавить идентификатор ресурса либо для обновления, либо для создания нового - так что просто не объединяйте свой идентификатор с вашим объектом
[HttpPut("game/{id}")]
public IActionResult UpdateGame(int id, [FromBody]Game update) {
//...
}
Если вы используете Asp.net Core, вы можете просто переписать свой URL-адрес в атрибуте HTTP-глаголов, как показано в приведенном выше коде. Поэтому передайте свой идентификатор ресурса в URL-адрес и привяжите свой объект в теле. Ваш URL-адрес должен иметь вид https://localhost:44359/api/v1/game/2
Надеюсь, это поможет вам - счастливого кодирования!
Параметр шаблона маршрута {update.GameID}
не является стандартным для того, что предлагается в документации
Предполагая, что идентификатор игры представляет собой целое число, просмотрите следующее
//PUT .../game/5
[Route("game/{id:int}")]
[HttpPut]
public IActionResult updateGame(int id, [FromBody]Game update) {
//...
}
Маршрутизация ссылок на действия контроллера в ASP.NET Core
Я бы также предложил вам пересмотреть логику действия, поскольку я не верю, что оно делает то, что, по вашему мнению, делает с обновлением сущности, возвращаемой из контекста.
Можете ли вы изменить свой определяющий маршрут так же, как
[Route("game")]
[HttpPut]
public IActionResult updateGame([FromBody]Game update)
{
//your code
}
И звони из угловых вроде
putGame(game:Game){
return this._http.put(this.url + "game", game);
}
Вы можете получить Gameid от игрового объекта, поэтому не нужно от URL