none
Ajuda em rota em web API RRS feed

  • 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

    segunda-feira, 27 de março de 2017 12:34

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
    segunda-feira, 27 de março de 2017 14:15

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
    segunda-feira, 27 de março de 2017 13:04
  • 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
    segunda-feira, 27 de março de 2017 14:15