Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Uso do atributo "[FromQuery]" em Api

Pessoal,

Estou usando o dotnet core 2.2, criei uma api e anotei com o atributo "[FromQuery]", não entendi por que não funciona. 1] chamada: curl -X GET -L -k -i http://localhost:5000/api/AcoesFiscais/numeroAcaoFiscal?acaoFiscal=12345678901234

2] o método da classe ApiController que herda de ControllerBase:

namespace AinfBackend.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AcoesFiscaisController : ControllerBase
    {
...
        [HttpGet("numeroAcaoFiscal/{acaoFiscal}")]
        public ActionResult<IEnumerable<AcaoFiscal>> 
            GetAcoesFiscaisPorNumeroAcaoFiscal([FromQuery] string acaoFiscal)
        {
            var acoesFiscais = AcaoFiscalBO.getAcoesFiscaisPorNumeroAcaoFiscal(acaoFiscal);

            if (acoesFiscais.Count != 0) return acoesFiscais.ToList();
            var mensagem = $"Nenhuma acao fiscal encontrada por numero acao fiscal: {acaoFiscal}";
            return NotFound(mensagem);

        }

Alguem poderia ajudar?

Obrigado.

5 respostas
solução!

Wilson, bom dia.

Qual o retorno da requisição? 404, not found?

Primeiro teste que vc precisa fazer é saber se o código da action está sendo executado. Vc pode verificar isso debugando ou então olhando o log da aplicação (se estiver sendo executada no terminal basta olhar lá). No log irá informar se uma action que atende a requisição foi encontrada (no caso GetAcoesFiscaisPorNumeroAcaoFiscal).

Se não estiver sendo executado é algum problema na configuração de sua rota (suspeito que seja no atributo HttpGet da action).

Se estiver sendo executado o model binding não está conseguindo injetar o valor do parâmetro acaoFiscal no argumento de entrada do método. Parece que está correto em seu código. Experimenta remover o atributo só pra verificação.

Aguardo seu retorno.

Acredito que foi isso mesmo, o HttpGet, fazendo testes. Verifiquei que o endpoint não era exatamente o que eu estava pensando: 'api/[controlller]/numeroAcaoFiscal/{acaoFiscal}?acaoFiscal=XXXX'

Alterei um pouco e funcionou retirando o parâmetro do m HttpGet e deu certo, ficou: 'api/[controller]/[action]?acaoFiscal=XXXX'.

Aproveitando a sua resposta, vou fazer os cursos 2 e 3, mas você teria algum livro que trata de "NotFound(), Ok(), BadRequest(), Created()' especificamente para projetos 'webapi'? Baixei alguns livros na internet e vi que a documentação não bate bem com o dotnet core 2.2... Como não usei o MVC, tenho certa dificuldade e background no framework.

Obrigado pela resposta. PS: Gostei muito do primeiro curso, começando o segundo.

Wilson, obrigado pelo feedback.

Minhas duas indicações de material de estudo são o site com a documentação da Microsoft sobre APIs usando AspNet Core e o manual de construção de APIs, também da Microsoft.

Nos cursos 2 e 3 procuro sempre deixar referências que usei em cada aula. Não se esqueça de conferí-las.

Abraço!

Valeu Daniel. []'s.

Beleza, Wilson! Peço a gentileza de fechar o tópico, ok?