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

爷,独闯天下 提交于 2021-01-20 09:08:18

问题


I'm trying to update an entry in the game table. However, my PUT request in ASP.NET never seems to trigger, and I can't figure out why.

This is controller in 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);
}

And this is the code I use in 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);
}

Edit 1: I do have a list of GET-requests, which all work just fine. It's only the PUT-request that fails.


回答1:


If you are using PUT request you need to add a resource id either to update or create new - so just don't combine your id with your object

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

If you are using Asp.net Core you can just re-write your URL on your HTTP verbs attribute like the code above - So pass your resource id in the URL and bind your object in the body - Your URL should read as https://localhost:44359/api/v1/game/2

Hope this helps you - Happy coding !!




回答2:


The route template parameter {update.GameID} is not standard to what is suggested by documentation

Assuming the game id is an integer review the following

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

Reference Routing to controller actions in ASP.NET Core

I would also suggest you review the logic of the action as I do not believe it is doing what you think it does with updating the entity returned from the context.




回答3:


Can you modify your defining route just like

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

And call from angular like

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

you can receive gameid from game object so don't need from url



来源:https://stackoverflow.com/questions/53244551/cant-get-http-put-request-to-work-in-asp-net-core

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!