我正在跟踪并实施以下项目的附带项目: https://docs.microsoft.com/es-mx/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.0&tabs=visual-studio
但是在调用[HttpGet("{id}")]
的部分中,它仅适用于id
字段,但是我想使用其他字段而不是id
来检索存储在DBmemory中的JSON。 ;在这种情况下,我想按字段TAG
管理数据。
我该怎么做?
我已经尝试将所有id
部分更改为TAG
,这是我要查找的字段,但是当我这样做时,post方法会中断。
// GET: api/Maquinas/5
[HttpGet("{id}")]
public async Task<ActionResult<Maquina>> GetMaquina(string id)
{
// HERE. i need to find data with the field of "TAG" not "id"
var maquina = await _context.Maquinas.FindAsync(id);
if (maquina == null)
{
return NotFound();
}
return maquina;
}
答案 0 :(得分:2)
不要被称为id的事实所困扰。您可以利用此端点,而不是传递id的值来传递标签api / Maquinas / tagvalue的值。
以后,您应该在进行的调用中使用此值来检索要查找的实体。
_context.Maquinas.FirstOrDefaultAsync(maquina => maquina.Tag == id);
我在这里假设要过滤的属性称为Tag
,其类型是字符串。这很有可能,至少该属性的名称不是该名称。因此,您必须相应地更改上面的代码。
这将解决您的问题,但是您不应该不认为这是最佳做法。您的API的语义将被破坏。我与上面分享的原因很明显,是向您显示参数id的名称与您传递的参数无关。没有任何检查会阻止您“通过”任何东西。我之所以写您的API的语义将被破坏的原因是,由于这将是REST api,因此有人会期望这样的端点:
api/Maquinas/1
用于获取ID为1的实体。