c# - 如何搜索除id之外的其他字段

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

我正在关注并实现一个副项目: https://learn.microsoft.com/es-mx/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.0&tabs=visual-studio

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

最佳答案

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

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

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

我在这里假设您要过滤的属性称为 Tag 并且它的类型是字符串。很有可能,至少属性(property)的名称不是这个。所以你必须相应地更改上面的代码。

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

api/Maquinas/1

用于获取 id 为 1 的实体。

关于c# - 如何搜索除id之外的其他字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58573717/

相关文章:

url - URISyntaxException - 如何处理带有 % 的 url

c# - 将测试项目 appSettings 附加到 ASP.NET Core 集成测试

c# - 将 Amazon S3 Nuget 包含在 Xamarin Android 应用程序中会导致 FileNotFoundException

c# - 首次加载时 WPF 验证未触发

c# - Azure CDN + Asp.net MVC 云服务压缩 bundle 不起作用

c# - Web API 路由操作

asp.net-mvc - 如何在owin启动类中注入(inject)依赖

asp.net-web-api - 如何将 GET 中的复杂对象发送到 WEB API 2

Android - 远程登录成功但不保留登录状态

Angular http.get 不工作