为什么我们在发出 HttpPut 请求时发送身份和实体
Why do we send the identity and the entity when we do a HttpPut request
为什么我们在发出 HttpPut 请求时要发送身份和实体。
Id 已在模型上设置。
这是Visual Studio2019
生成的代码
[HttpPut("{id}")]
public async Task<IActionResult> PutReport(int id, Report report)
{
if (id != report.Id)
{
return BadRequest();
}
_context.Entry(report).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ReportExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
如果我从未见过 VS 生成的代码,这就是我会编写的代码。
[HttpPut]
public async Task<IActionResult> PutReport(Report report)
{
if (report.Id == 0)
{
return BadRequest();
}
_context.Entry(report).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ReportExists(report.Id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
那么Id给table带来了什么??
这与惯例有关,而不是严格要求 ID 出现在路由中。 Visual Studio 的模板遵循创建 API 的 RESTful 风格,并且 style/convention 指出 PUT 端点应该代表正在更新的实体。没有 ID 的 route/URL(例如“/report”)不代表正在更新的特定报告(即使 ID 在有效负载中),而有 ID 的则代表(例如“/report/12345").
如果这是面向 API 的 public,那么我强烈建议您遵循一般的 REST 约定并在路由中包含 ID。如果没有,那么你可以随心所欲地灵活,但代价是不遵循大多数 REST API 遵循的一般约定(这可能会使阅读你的代码的其他人感到困惑)。
有些人在路线和模型中都包含 ID,有些人只在路线中走,完全有可能也只在模型中走。但是如果你想保持一般的 RESTful 质量,我建议无论你是否想要它在模型中都将它保留在路线中。
为什么我们在发出 HttpPut 请求时要发送身份和实体。 Id 已在模型上设置。
这是Visual Studio2019
生成的代码 [HttpPut("{id}")]
public async Task<IActionResult> PutReport(int id, Report report)
{
if (id != report.Id)
{
return BadRequest();
}
_context.Entry(report).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ReportExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
如果我从未见过 VS 生成的代码,这就是我会编写的代码。
[HttpPut]
public async Task<IActionResult> PutReport(Report report)
{
if (report.Id == 0)
{
return BadRequest();
}
_context.Entry(report).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ReportExists(report.Id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
那么Id给table带来了什么??
这与惯例有关,而不是严格要求 ID 出现在路由中。 Visual Studio 的模板遵循创建 API 的 RESTful 风格,并且 style/convention 指出 PUT 端点应该代表正在更新的实体。没有 ID 的 route/URL(例如“/report”)不代表正在更新的特定报告(即使 ID 在有效负载中),而有 ID 的则代表(例如“/report/12345").
如果这是面向 API 的 public,那么我强烈建议您遵循一般的 REST 约定并在路由中包含 ID。如果没有,那么你可以随心所欲地灵活,但代价是不遵循大多数 REST API 遵循的一般约定(这可能会使阅读你的代码的其他人感到困惑)。
有些人在路线和模型中都包含 ID,有些人只在路线中走,完全有可能也只在模型中走。但是如果你想保持一般的 RESTful 质量,我建议无论你是否想要它在模型中都将它保留在路线中。