如何搜索ID以外的其他字段

时间:2019-10-26 18:50:30

标签: c# asp.net-web-api http-get

我正在跟踪并实施以下项目的附带项目: 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;
}

1 个答案:

答案 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的实体。