Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

ASP.NET MVC: rotas de actions com muitos parâmetros


O padrão do ASP.NET MVC para tratamento de rotas é trabalhar respondendo: "controller/action/id". Isto quer dizer que por padrão nossos projetos ASP.NET MVC respondem a requisições do tipo: "produtos/detalhes/10" ou "vendas/cancelar/23".

Os recursos com vários parâmetros

Se quisermos responder a requisições do tipo "minhaempresa/setor/controller/action/param1/param2/param3" não conseguimos isso por default, e é então que entra a configuração de rotas. Responder a uma requisição com mais de um parâmetro desta forma não é complexo, na verdade é algo bastante simples. Para um primeiro exemplo vamos imaginar que temos uma action que "mistura cores". Queremos poder escrever uma url assim no browser: "estudio/misturar/azul/vermelho/verde".

Este é nosso controller:

public class EstudioController : Controller{
  [HttpGet]
  public ActionResult Misturar(string cor1, string cor2, string cor3) {
    object corMisturada = string.Format("{0} + {1} + {2}", cor1, cor2, cor3);
    return View("NovaCor", corMisturada);
  }
}

Se simplesmente acessarmos a url no browser, obteremos:

Erro de rota: recurso não encontrado

Adicionando uma rota no Global.asax

Para que possamos realizar a chamada a este recurso, e receber em nossa action os valores desejados, precisamos adicionar uma rota em nossa tabela de rotas. A configuração de rotas no ASP.NET MVC é feita no arquivo Global.asax, de uma maneira bastante simples. Nosso arquivo Global.asax deve estar assim:

public static void RegisterRoutes(RouteCollection routes){
  routes.IgnoreRoute("{Resource}.axd/{pathInfo}");

    routes.MapRoute(
      "Default", // Route name
      "{Controller}/{Action}/{Id}", // URL with parameters
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter Defaults
    );
}

Este código adiciona uma rota a nossa tabela de roteamento. Vamos ver então como rotear para conseguirmos responder a nossas requisições precisamos do código a seguir:

routes.MapRoute(
  "MisturarCores",
  "{Controller}/{Action}/{cor1}/{cor2}/{cor3}
");

Com a adição desta rota, conseguimos responder então ao nosso recurso e chegar a nossa action com todos os parâmetros preenchidos.

Resultado

Desta forma passamos a compreender um pouco mais como é que funciona o framework MVC no ASP.NET. Temos rotas mapeadas a serem respondidas, e isso não é assim apenas no ASP.NET, é assim também no Rails, um dos mais conhecidos frameworks MVC para web. Ter conhecimento e saber do potencial que temos ao trabalhar com as rotas com toda certeza nos ajudará a criar aplicações mais interessantes com o ASP.NET MVC. Criei uma View simples apenas para renderizar o resultado da nossa action, e aqui segue o resultado:

Rota funcionando

É isso galera, em breve veremos um pouco mais sobre como trabalhar com rotas no ASP.NET MVC.Veja aqui um overview sobre rotas no ASP.NET MVC: http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs

Abraços,

Vinicius Quaiato.

Voltar

Fork me on GitHub