Artigos de Tecnologia e Negócios > Programação

Mesma rota, parâmetros diferentes

Gabs Ferreira
Gabs Ferreira

Esses dias estava fazendo uns testes com o projeto da curso de ASP.NET MVC do Alura e me deparei com a necessidade de ter que buscar um autor por Id ou Nome.

Eu teria então, duas rotas exatamente iguais, mas com tipos de parâmetros diferentes: uma receberia um int e a outra, string:


Route("/autor/busca/{id}")
public ActionResult Busca(int id) {
     IList<Autor> autores = dao.BuscaPorId(id); //restante do código 
     } Route("/autor/busca/{nome}")
      public ActionResult Busca(string nome) {
           IList<Autor> autores = dao.BuscaPorId(id); 
           //restante do código 
}

Isso quer dizer então que se eu tentar acessar o endereço /autor/busca/5 o framework deve me direcionar para o primeiro método. E para o endereço /autor/busca/gabriel, o segundo método, certo? Errado! Se tentarmos acessar qualquer um destes endereços, vai acontecer um erro parecido com esse:


The current request is ambiguous between the following action methods: System.Web.Mvc.ActionResult Metodo(Int32) on type MeuSistema.Controllers.HomeController System.Web.Mvc.ActionResult Metodo(System.String) on type MeuSistema.Controllers.HomeController

Neste erro, o framework está te dizendo: cara, você me passou uma url que bate com duas rotas aqui. Eu não sei qual chamar.

Indicando o tipo do parâmetro na rota


    Route("/autor/busca/{id:int}")
    public ActionResult Busca(int id) {
     IList<Autor> autores = dao.BuscaPorId(id); 
     //restante do código 
     } 
     Route("/autor/busca/{nome}")
    public ActionResult Busca(string nome) {
         IList<Autor> autores = dao.BuscaPorId(id); 
         //restante do código 
        }

Consegue enxergar a diferença? Na rota do método que recebe um inteiro, adicionamos :int na frente do nome do parâmetro.

Agora, se tentarmos acessar a URL /autor/busca/5 o ASP.NET MVC irá direcionar para o primeiro método, que eu especifiquei que recebe um inteiro, adicionando o :int na frente do nome do parâmetro. Se passarmos qualquer outro valor que não seja um número inteiro(como /busca/autor/gabriel, /autor/busca/123123testando e /autor/busca/[email protected]$%¨$%¨&&) será o outro.

Legal, né? Confira nosso curso Projeto Completo: Controle Financeiro com Asp.NET MVC 5 :)

Leia também:

Artigos de Tecnologia e Negócios > Programação

Cursos profissionais de Programação é na Alura, comece agora!

  • 1056 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1056 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1056 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1056 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana