Inquiridor
dois metodos GET no mesmo Controller

Pergunta
-
Todas as Respostas
-
-
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 }
);- Editado Andrey Mariano quinta-feira, 17 de julho de 2014 23:50
-
-
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....
-
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