как искать другое поле, кроме id - PullRequest
3 голосов
/ 26 октября 2019

Я слежу и реализую сторонний проект из: https://docs.microsoft.com/es-mx/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.0&tabs=visual-studio

Но в той части, где вызывается [HttpGet("{id}")], он работает только с полем id, но я хочу получитьJSON хранится в памяти DBmeory с другим полем вместо 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;
}

1 Ответ

2 голосов
/ 26 октября 2019

Не зацикливайтесь на том, что называется id. Вы можете использовать эту конечную точку и вместо передачи значения id передать значение тега api / Maquinas / tagvalue.

Позже вы должны использовать это значение в вызове, который вы делаете, чтобы получить искомую сущность.

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

Я предположил, что свойство, по которому вы хотите фильтровать, называется Tag, а его тип - строка. Вполне вероятно, что, по крайней мере, название объекта не будет таким. Таким образом, вы должны соответствующим образом изменить приведенный выше код.

Это решит вашу проблему, но вы должны , а не , считать это лучшей практикой. Семантика вашего API будет нарушена. Причина, по которой я поделился выше, заключается в том, чтобы показать вам, что имя параметра id не имеет отношения к тому, что вы передаете. Нет никакой проверки, которая остановила бы вас за то, что вы пропустили «что-нибудь». Причина, по которой я написал, что семантика вашего API будет нарушена, заключается в том, что, поскольку это будет API-интерфейс REST, кто-то ожидает конечную точку, подобную следующей:

api/Maquinas/1

для получения объекта с идентификатором1.

...