Не удается получить 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

Другие вопросы по тегам