none
dois metodos GET no mesmo Controller RRS feed

  • Pergunta

  • Estou começando meus estudos no asp.net web api e tive uma dúvida.

    coloquei dois métodos get ( HttpGet ) no msm controller e não tive sucesso na execução. 

    Esta restrição realmente existe ou fiz algo de errado?

    quinta-feira, 17 de julho de 2014 23:22

Todas as Respostas

  • Andrey Mariano, Boa noite, Você pode posta seu erro?

    __________________________________________________________________________________________________________ Atenciosamente, Mike Rodrigues De Lima.

    quinta-feira, 17 de julho de 2014 23:26
  • os métodos:

            [HttpGet]
            public string Listar(int id)
            {
                return "value" + id;
            }


            [HttpGet]
            public IEnumerable<string> Listar()
            {
                return new string[] { "value1", "value2" };
            }

    o erro: 

    <Error>
    <Message>A solicitação é inválida.</Message>
    <MessageDetail>
    O dicionário de parâmetros contém uma entrada nula para o parâmetro 'id' de tipo que não permite valor anulável 'System.Int32' para o método 'System.String Listar(Int32)' em 'Metodos.Controllers.ClienteController'. Um parâmetro opcional deve ser um tipo de referência, um tipo que permite valor anulável ou declarado como opcional.
    </MessageDetail>
    </Error>

    tinha feito a seguinte configuração:

    config.Routes.MapHttpRoute(
                    name: "DefaultApi2",
                    routeTemplate: "api/{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );


    quinta-feira, 17 de julho de 2014 23:45
  • Em C# vc não pode concatenar uma string direto com um int.

    Você deveria fazer return "value" + id.ToString();

    sexta-feira, 18 de julho de 2014 15:28
    Moderador
  • a conversão ocorre automaticamente, veja a resposta do fabio em http://bytes.com/topic/c-sharp/answers/577964-string-operator-conversion.

    os metodos não estão com problema. a questão é q quando existe métodos com msm verbo (get, post, ...), esta dando erro pois o iis está se confundindo com as rotas.

    Eu queria saber se existe uma restrição do web api quanto a metodos com o msm verbo....

    sexta-feira, 18 de julho de 2014 18:04
  • Caro Andrey,

    Quanto ao problema que você está tendo e reportou é que o primeiro tipo precisaria ser nullable, caso contrário ele tentará colocar o null em seu parametro e não dará certo, troque para: int? id.

    Para funcionar sem problemas você pode alterar para:

    public string Listar(int idN)
    {
        return "value" + idN.ToString();
    }
    
    public IEnumerable<string> Listar()
    {
        return new string[] { "value1", "value2" };
    }

    Pois sua rota coloca "id" como parâmetro default, se você não tem nenhum get esperando por "id" vai funcionar da forma que deseja.


    Victor Santos

    • Sugerido como Resposta VictorSantos segunda-feira, 21 de julho de 2014 19:00
    • Não Sugerido como Resposta VictorSantos segunda-feira, 21 de julho de 2014 19:00
    segunda-feira, 21 de julho de 2014 18:57