我的以 ID 作為引數的 GET 請求沒有正確加載我的所有資料。我的 PUT 請求根據 Swagger 成功更改了資料,但隨后 GET 請求顯示沒有進行任何更改。我的帶有引數的 GET 請求說我的玩家資料不應該是空的。我的正常 GET 請求會正確加載資料,除非 PUT 請求中的資料更改了 Player [] 中的某些內容。請參閱下面的代碼。
播放器型號:
public class Player
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
團隊模型:
public class Team
{
public long Id { get; set; }
public string Name { get; set; }
public string Location { get; set; }
public IEnumerable<Player> Players { get; set; }
}
通用 GET 請求(回傳 POST 資料,但未從 PUT 請求更新玩家資料):
[HttpGet]
public async Task<ActionResult<IEnumerable<Team>>> GetTeams()
{
return await _context.Teams.Include(t => t.Players).ToListAsync();
}
帶有 ID 引數的 GET 請求(不加載玩家資料):
[HttpGet("{id}")]
public async Task<ActionResult<Team>> GetTeam(long id)
{
var team = await _context.Teams.FindAsync(id);
if (team == null)
{
return NotFound();
}
return team;
}
PUT 請求(更改資料):
[HttpPut("{id}")]
public async Task<IActionResult> PutTeam(long id, Team team)
{
if (id != team.Id)
{
return BadRequest();
}
_context.Entry(team).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TeamExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
帶有 ID 引數回應的 GET 請求:
{
"id": 1,
"name": "panthers",
"location": "string",
"players": null
}
本質上,我的 PUT 請求回傳 204 并且 Swagger 說我已經更改了資料。播放器串列中的特定更改不會更改,而除此之外的任何內容(例如位置)都會更改。此外,帶有 ID 的 GET 請求根本不回傳 Player。GET 顯示玩家資料,但不會在我的 PUT 請求中更改。
uj5u.com熱心網友回復:
獲取 Players特定team的 by id,原理是一樣的,直接加載導航屬性:
var team = await _context.Teams.Include(t => t.Players).FindAsync(id);
對于PUT請求,我會說你應該有一個UpdateorUpdateAsync方法:
_context.Teams.Update(team);
await _context.SaveChangesAsync();
如果這不起作用或不可用,您也可以嘗試將播放器標記為已修改:
_context.Entry(team).State = EntityState.Modified;
foreach(var player in team.Players)
{
_context.Entry(player).State = EntityState.Modified;
}
await _context.SaveChangesAsync();
如果它仍然不起作用,您可以加載物體,這將跟蹤物體并檢測更改:
var teamFromBd = await _context.Teams.Include(t => t.Players).FindAsync(id);
teamFromBd = team; //*
await _context.SaveChangesAsync();
確保Players確實系結到team方法引數。
*以上是簡化,應該需要對team屬性一一賦值(fot除外Id)。您可以按原樣嘗試,但可能行不通。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510757.html
上一篇:在未找到生產模式URL時,Angular無法訪問影像
下一篇:POST請求成功但GET請求為空
