Usuário com melhor resposta
Ajuda em rota em web API

Pergunta
-
Criei um projeto web API e estou encontrando dificuldade em acessar algumas rotas que preciso vou explicar melhor.
Essa é minha WebAPiConfig
// Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
Tenho um controller cliente onde tenho alguns métodos, esse abaixo na url se eu digitar //localhost/cliente ele executa e mostra os dados
[HttpGet] [Route("")] [ResponseType(typeof(ICollection<CLIENTE>))] public async Task<IHttpActionResult> Get()
Mais esse abaixo se eu digitar na url //localhost/cliente/GetById/1 ele me retorna 404.0 not found
[HttpGet] [Route("{id:int}")] [ActionName("GetById")] [ResponseType(typeof(CLIENTE))] public async Task<IHttpActionResult> Get(int id)
A mesma coisa acontece aqui tb se eu digitar //localhost/cliente/logar/1/1 me retorna 404 not found
[HttpGet] [Route("{id:int}/{id1:int}")] [ActionName("logar")] [ResponseType(typeof(CLIENTE))] public async Task<IHttpActionResult> logar(string usuario,string senha)
O que estou fazendo de errado ?
Junior
Respostas
-
Fabio obrigado por me responder, mais resolvi, fiz assim em cada route coloquei o caminho por completo
[Route("GetById/{id:int}")]
No logar como vou executar para permitir o login do usuário, pesquisando vi que quando se quer passar mais de um parametro deve ser um post e frombody ai deu certo e ficou assim e retirei o route. o que acima havia colocado como logar.
public async Task<IHttpActionResult> PostAsync([FromBody]CLIENTE cliente)
Junior
- Marcado como Resposta Junior_luiz segunda-feira, 27 de março de 2017 19:17
Todas as Respostas
-
Olá,
Como você está utilizando o nome do método para definição na sua URL, não deveria ajustar o mapeamento de URL adicionando a action, como abaixo?
name: "DefaultApi", routeTemplate: "{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional }
Editando:
É melhor adicionar uma nova configuração de URL, como abaixo:
routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
Obs.: Na primeira resposta anterior, coloquei a action como optional... mas me enganei.. não pode ser optional pois está no meio da URL.. então a melhor solução é ter 2 mapeamentos mesmo...
Fabio Rosa.
- Editado Fabio Rosa segunda-feira, 27 de março de 2017 13:26 Ajuste de Resposta
-
Fabio obrigado por me responder, mais resolvi, fiz assim em cada route coloquei o caminho por completo
[Route("GetById/{id:int}")]
No logar como vou executar para permitir o login do usuário, pesquisando vi que quando se quer passar mais de um parametro deve ser um post e frombody ai deu certo e ficou assim e retirei o route. o que acima havia colocado como logar.
public async Task<IHttpActionResult> PostAsync([FromBody]CLIENTE cliente)
Junior
- Marcado como Resposta Junior_luiz segunda-feira, 27 de março de 2017 19:17