Desenvolvimento - ASP. NET
Trabalhando com Rotas no ASP.NET MVC
O ASP.NET MVC utiliza o ASP.NET Routing para rotear URLs, tornando o acesso e requisições via URL mais amigáveis. O recurso ASP.NET Routing não é exclusivo do ASP.NET MVC, mas se tornou um recurso indispensável, já que o mesmo é utilizado para endereçar as requisições para as ações dos Controllers.
por André BaltieriIntrodução
O ASP.NET MVC utiliza o ASP.NET Routing para rotear URLs, tornando o acesso e requisições via URL mais amigáveis. O recurso ASP.NET Routing não é exclusivo do ASP.NET MVC, mas se tornou um recurso indispensável, já que o mesmo é utilizado para endereçar as requisições para as ações dos Controllers.
Entendendo o ASP.NET Routing
As aplicações ASP.NET MVC já vem configuradas para utilizar o ASP.NET Routing, e estas configurações estão armazenadas no arquivo Web.Config.
Basicamente, temos quatro sessões relevantes no arquivo Web.Config quando falamos de rotas. São elas:
· system.web.httpModules
· system.web.httpHandlers
· system.webserver.modules
· system.webserver.handlers
Durante a execussão da aplicação, uma tabela de rotas (Route Table) é criada durante o evento Application_Start() no arquivo Global.asax (Arquivo que gerencia o ciclo de vida das aplicações ASP.NET).
Resumindo:
· Uma requisição do browser é mapeada para uma ação do controller através de uma funcionalidade do ASP.NET chamada de ASP.NET Routing.
· O ASP.NET Routing é utilizado pelo ASP.NET MVC framework para rotear requisições para as ações do controller.
· O ASP.NET Routing utiliza o Route Table para manipular as requisições que chegam. Esta tabela de rotas é criada quando a aplicação roda pela primeira vez. Esta tabela é configurada no arquivo Global.asax.
Nota: A URL não significa que estamos endereçando uma página.
Como mostrado na Listagem 1, o arquivo Global.asax contém as rotas (Neste caso possúi somente a rota padrão [DEFAULT]) e o método Application_Start() invoca o método RegisterRoutes() que contém as rotas.
1: public class MvcApplication : System.Web.HttpApplication
2: {
3: public static void RegisterRoutes(RouteCollection routes)
4: {
5: routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
6:
7: routes.MapRoute(
8: "Default", // Route name
9: "{controller}/{action}/{id}", // URL with parameters
10: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
11: );
12:
13: }
14:
15: protected void Application_Start()
16: {
17: AreaRegistration.RegisterAllAreas();
18:
19: RegisterRoutes(RouteTable.Routes);
20: }
21: }
Listagem 1 – Arquivo Global.asax
Quando a aplicação roda pela primeira vez, o método Application_Start() é chamado. Então este chama o método RegisterRoutes() que criar a tabela de rotas padrão.
A tabela de rotas padrão consiste em uma rota. Esta rota padrão quebra todas as requisições em 3 segmentos.
O primeiro segmento mapeia o nome do controller, o segundo mapeia o nome da ação e o terceiro mapeia um parâmetro passado para ação chamado Id.
Exemplo de URL http://localhost/Product/Detail/3
· Controller = Product
· Action = Details
· Id = 3
Rotas Customizadas (Custom Routes)
Para muitas aplicações ASP.NET MVC a tabela de rotas padrão funcionará bem, entretanto, poderá haver necessidade da criação de rotas customizadas.
Imagine, por exemplo, a construção de um blog onde pode se fazer
necessário a manipulação de requisições como esta:
/Archive/02-09-2010.
Quando um usuário faz esta requisição, isto corresponde a uma data, mas para manipular esta requisição será necessário criar uma rota customizada.
A Listagem 2 mostra a criação de uma nova Rota no arquivo Global.asax. Esta rota é customizada para listar entradas do blog cuja data seja igual a data especificada pelo parâmetro entryDate.
1: routes.MapRoute(
2: "Blog", // Route name
3: "{Archive}/{entryDate}", // URL with parameters
4: new { controller = "Archive", action = "Archive", entryDate = DateTime.Now } // Parameter defaults
5: );
Listagem 2 – Rota customizadas para rotear entradas de um blog pela data do post.
A ordem de adição das rotas na Route Table é importante. Adcionamos a rota antes da rota Default (Padrão). Se esta ordem for invertida, a rota padrão sempre será chamada, ao invés da rota customizada.
A rota customizada assume qualquer requisição que comece com /Archive/. Exemplo:
· /Archive/10-28-1985
· /Archive/10-6-2010
· /Archive/learnmvc
O mapeamento da rota customizada mapeia a requisição para o controller Archive (Listagem 3) e invoca a ação Entry().
Quando a ação Entry() é chamada, a data é passada como parâmetro (entryDate).
1: using System;
2: using System.Web.Mvc;
3:
4: namespace Video3.Controllers
5: {
6: public class ArchiveController : Controller
7: {
8: //
9: // GET: /Archive/
10:
11: public string Archive(DateTime entryDate)
12: {
13: return entryDate.ToString("dd/MM/yyyy");
14: }
15:
16: }
17: }
Listagem 3 – Controller Archive
Conclusão
A rota padrão do ASP.NET MVC atende boa parte das nossas necessidades, mas não todas. A criação de rotas customizadas permite maior flexibilidade e amigabilidade das URLs, tornando a aplicação mais acessível.
Entendemos também como funciona o ASP.NET Routing, que é um componente fundamental quando falamos sobre roteamento de URLs.
Referências
ASP.NET MVC
http://www.asp.net/mvc
Até o próximo artigo!