Passando vários parâmetros - API ASP.NET Core e Web API - GET

Olá. Novamente gostaria de fazer um post (bem pequeno desta vez) para contribuir com aqueles que estão apredenndo RESTFull Services e ASP.NET CORE.

No projeto que venho trabalhando no Git Hub estou criando os métodos para retornar os registros. Nestes são enviados como parâmetros uma data inicial e o nome de um dos usuários para os quais os registros da agenda são criados.

Lendo a documentação sobre como passar múltiplos parâmetros para este método fiquei um pouco confuso porque encontrei vários formatos. Entretanto, ao tentar implementar, nenhum destes funcionou.

Até que, pesquisando no bom e velho Stackoverflow encontrei a dica para usar o atributo [FromQuery] como está no código abaixo:

using agenda.Classes; // GET http://localhost:59475/api/schedule/dateandowner?date=2018-09-10&name=Abbott,%20Ima%20A. [HttpGet("DateAndOwner")] public IEnumerable<Schedule> GetByDateAndName([FromQuery]string date, [FromQuery]string name) { if (string.IsNullOrEmpty(date) || string.IsNullOrEmpty(name)) { return null; } DateTime dateIni; DateTime dateEnd; if (!DateTime.TryParse(date, out dateIni)) { return null; } dateEnd = new DateTime(dateIni.Year, dateIni.Month, dateIni.Day, 23, 59, 59); string sql = "select * from users_schedules where StartDate between @StartDateIni and @StartDateEnd and [owner] = @owner"; using (var conn = new SqlConnection(ConfigHelper.ConnectionString)) { return conn.Query<Schedule>(sql, new { StartDateIni = dateIni, StartDateEnd = dateEnd, owner = name }).ToList(); } }

O uso deste atributo deve ser feito colocando ao lado da variável passada no método. Assim, para cada elemento dentro da Query String da URL o valor vai ser armazenado na respectiva variável.

Caso este não seja passado, a variável irá receber o valor padrão do tipo representado.

Vale ressaltar que o ideal, para este tipo de passagem de parâmetro, é usar sempre tipos primitivos como int, string, date, etc. Para tipos complexos outros parâmetros como [fromBody] ou [FromHeader] (que são novos) devem ser usados.

Um tempo depois, conversando com meu colega, Marcos Jacobs (https://github.com/mvmjacobs) ele me deu a dica de ler a documentação sobre RESTFul services e Web APIs para clarear as ideias e entender a essência de uma Web API. O resultado está nos links no final do post. Até a próxima!

Links