簡體   English   中英

無法讓 HTTP PUT 請求在 ASP.NET Core 中工作

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

我正在嘗試更新game表中的條目。 但是,我在 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 請求失敗了。

如果您正在使用PUT請求,您需要添加一個資源 ID 來更新或創建新的 - 所以不要將您的 ID 與您的對象結合起來

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

如果你使用的是Asp.net Core,你可以像上面的代碼一樣在你的 HTTP 動詞屬性上重寫你的 URL - 所以在 URL 中傳遞你的資源 ID 並在正文中綁定你的對象 - 你的 URL 應該讀為https://localhost:44359/api/v1/game/2

希望這對您有所幫助 - 編碼愉快!!

路由模板參數{update.GameID}不是文檔建議的標准

假設游戲 ID 是整數,請查看以下內容

//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);
}

您可以從游戲對象接收游戲 ID,因此不需要從 url

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM