【问题标题】:how to search other field than id如何搜索除id以外的其他字段
【发布时间】:2020-02-22 16:52:45
【问题描述】:

我正在关注并实施以下项目: https://docs.microsoft.com/es-mx/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.0&tabs=visual-studio

但是在调用[HttpGet("{id}")]的部分,它只适用于id字段,但我想检索存储在DBmemory中的JSON,用其他字段代替id;在这种情况下,我想按字段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;
}

【问题讨论】:

  • 当它“分手”时会发生什么?因为用 TAG 替换 id 将是我的处理方式。

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


【解决方案1】:

不要拘泥于被称为 id 的事实。您可以使用此端点,而不是传递 id 的值来传递标签的值,api/Maquinas/tagvalue。

稍后您应该在调用中使用此值来检索您正在寻找的实体。

_context.Maquinas.FirstOrDefaultAsync(maquina => maquina.Tag == id);

我在这里假设您要过滤的属性称为Tag,它的类型是字符串。很有可能,至少该物业的名称不是这个。所以你要对上面的代码做相应的修改。

这将解决您的问题,但您应该将此视为最佳做法。您的 API 的语义将被破坏。我分享上述内容的真正原因是向您展示参数 id 的名称与您传递的名称无关。没有任何检查会阻止您通过“任何东西”。我写你的 API 的语义会被破坏的原因是,因为这将是一个 REST api,所以有人会期望一个像下面这样的端点:

api/Maquinas/1

用于获取 id 为 1 的实体。

【讨论】:

  • 好吧,我像这样使用它: var maquina = await _context.Maquinas.FirstOrDefaultAsync(maquina => maquina.TAG == id);并做到这一点,谢谢
  • @SergioVillalobos 很棒。不客气。很高兴我提供了帮助。
猜你喜欢
  • 1970-01-01
  • 2015-01-11
  • 2016-03-11
  • 2020-12-29
  • 1970-01-01
  • 2020-09-25
  • 2014-04-08
  • 2021-07-29
  • 2018-12-03
相关资源
最近更新 更多