无法让 HTTP PUT 请求在 ASP.NET Core 中工作

Can't get HTTP PUT request to work in ASP.NET Core

我正在尝试更新 game table 中的条目。但是,我在 ASP.NET 中的 PUT 请求似乎从未触发过,我也不知道为什么。

这是 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 请求失败了。

路由模板参数 {update.GameID} 不符合文档建议的标准

假设游戏 id 为整数,请查看以下内容

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

引用Routing to controller actions in ASP.NET Core

我还建议您查看操作的逻辑,因为我不认为它在更新从上下文返回的实体时按照您的想法进行操作。

你能像这样修改你的定义路由吗

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

然后从angular打电话给

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

您可以从游戏对象接收 gameid,因此不需要从 url

如果您正在使用 PUT 请求,您需要添加一个资源 ID 来更新或创建新的 - 所以不要将您的 ID 与您的对象组合

[HttpPut("game/{id}")]
public IActionResult UpdateGame(int id, [FromBody]Game update) {
    //...
}

如果您使用的是 Asp.net Core,您只需像上面的代码一样在 HTTP verbs 属性上重写 URL - 所以请传递您的URL 中的资源 ID 并在正文中绑定您的对象 - 您的 URL 应读作 https://localhost:44359/api/v1/game/2

希望这对您有所帮助 - 编码愉快!!