Не удается получить HTTP-запрос PUT для работы в Asp.Net Core. - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь обновить запись в "игровой" таблице. Тем не менее, мой 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 ]

0 голосов
/ 11 ноября 2018

Можете ли вы изменить свой определяющий маршрут так же, как

[Route("game")]
[HttpPut]
public IActionResult updateGame([FromBody]Game update)
{
   //your code
}

и звонок из углового типа

putGame(game:Game){
    return this._http.put(this.url + "game", game);
}

вы можете получить Gameid от игрового объекта, поэтому не нужно от URL

0 голосов
/ 11 ноября 2018

Если вы используете 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

Надеюсь, это поможет вам - Счастливого кодирования!

0 голосов
/ 11 ноября 2018

Параметр шаблона маршрута {update.GameID} не является стандартным для того, что предлагается в документации

Предполагая, что идентификатор игры представляет собой целое число, просмотрите следующее

//PUT .../game/5
[Route("game/{id:int}")]
[HttpPut]
public IActionResult updateGame(int id, [FromBody]Game update) {
    //...
}

Ссылка Маршрутизация к действиям контроллера в ASP.NET Core

Я бы также предложил вам пересмотреть логику действия, поскольку я не верю, что оно делает то, что, по вашему мнению, оно делает с обновлением сущности, возвращенной из контекста.

...