5
respostas

Metodo GET

Bom Dia Pessoal,

Como eu consigo ter vários métodos Get no mesmo controller? Por exemplo um retorna uma lista de carros outro somente os carros de tal categoria?

Tentei fazer aqui e deu Tipo "MeuController" já define um membro chamado "Get" com os mesmo tipos de parâmetros.

Na verdade esse seria meu terceiro método Get do controller, com dois funciona beleza, o erro da no terceiro.

[Route("api/restaurante/{idRestaurante}")] //Aqui crio a rota para pegar o restaurante do banco passao o metodo Get public HttpResponseMessage Get(int idRestaurante)

[Route("api/restaurante/listarestaurante/")] public HttpResponseMessage Get()

[Route("api/restaurante/listapratosrestaurante/{idRestaurantePrato}")] public HttpResponseMessage Get(int idRestaurantePrato)

5 respostas

Oi Romario, tudo bom?

Nosso problema, está na ordem das variáveis das actions. Percebe que, pro .NET, não é tão trivial decidir se a rota:

localhost:porta/api/restaurante/listarestaurante

Vai bater na action:

[Route("api/restaurante/{idRestaurante}")]

Como listarestaurante sendo o id, ou se vai bater na action:

[Route("api/restaurante/listarestaurante")]

Como a gente esperava.

As variaveis na rota são muito boas pra pegar dados mas temos que tomar muito cuidado ao usar pra evitar esse tipo de conflito. No seu caso, o ideal seria que essas variáveis não fossem o ultimo parâmetro da rota. Ou seja, que houvesse um parametro a mais, depois da variavel, diferenciando uma action da outra.

Uma outra abordagem é separar essas actions em controllers diferentes, assim seu prefixo api/x diferenciaria uma action da outra tb =)

Abraço

Boa tarde André, Tentei fazer como você pediu, retirando os ids do último parâmetro e passando outro depois, pode me dar um exemplo com l código que enviei por favor?

Opa, segue exemplo:

apiRestaurante/lista
apiRestaurante/busca/{idRestaurante}
apiRestaurante/listapratos/{idRestaurantePrato}
`

Como o padrao de rotas do .NET, configurado no RouteConfig é /nomeDoController/nomeDaAction/id, você estaria no ApiRestauranteController na action listaRestaurante,busca e listaPratos, assim não haveria conflito =)

Ha deve ser por isso que continua o erro, estou tentando fazer uma api, ai na verdade não tem o nome da action, só api/controller/id, ajuda se eu mandar todo o código?

Opa, acho que ajuda sim. Assim da pra saber qual ferramenta especificamente você ta usando para desenvolver, etc.

Se você tiver num git melhor ainda =)