Para responder objetivamente a esta pergunta, convido-lhe a considerar a figura 2.2. Perceba que, mesmo adicionando novos parâmetros à URL, a exibição do conteúdo permanece inalterada.
Figura 2.2: Adicionando parâmetros à URL
Não há nada de errado com este comportamento, muito pelo contrário. Na
verdade, este é um dos grandes recursos implementados pelo framework. Gra-
ças a um mecanismo de roteamento de requisições convencionado, o ASP.NET
MVC consegue entender que as três diferentes chamadas ( http://localhost:1153/
,
http://localhost:1153/Home e
http://localhost:1153/Home/Index ) estão na verdade
fazendo referência ao mesmo recurso.
Talvez as perguntas que permeiem sua
mente neste instante são: onde está convencionado o mecanismo de rotas? Consigo visualizar e alterar essa configuração?
A resposta direta e definitiva para esta
pergunta é sim (veja a listagem 1).
Listagem 2.1 - Visualizando a configuração de rotas:
public static void RegisterRoutes(RouteCollection routes)
{
15
2.4. Navegação baseada em rotas
Casa do Código
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
}
Se você navegar até o diretório App_Start e expandi-lo através da Solution Ex-
plorer do projeto de exemplo, visualizará algumas classes escritas em C#. Todas elas implementam comportamentos que serão executados na inicialização da aplicação.
Dentre estes arquivos, encontra-se um chamado RouteConfig.cs. Com um du-
plo clique sobre o mesmo você poderá visualizar o método apresentado pela listagem 1.
No código apresentado pela listagem anterior, ficam claros dois aspectos em re-lação ao mecanismo de rotas. O primeiro faz menção ao fato de que se pode registrar novas e personalizadas rotas (vide o nome do método RegisterRoutes) para uma
aplicação. O segundo reside justamente no fato de que o ASP.NET MVC já traz consigo a implementação de uma rota padrão
de navegação e é ela que gera, de fato, o comportamento apresentado pela 2.2.
Note que, para a rota
Default ( name: "Default"), temos a atri-
buição do valor
Home para o atributo
Controller ( controller =
"Home"), do valor
Index para o atributo
Action ( action = "Index")
e do valor
UrlParameter.Optional
para o atributo
id
( id =
UrlParameter.Optional).
Se ligarmos os pontos, concluiremos que a rota apresentada por nossa aplicação de exemplo (ver novamente figura 2.2) atende ao padrão definido pelo framework.
Veja a comparação, padrão implementado:
controller = "Home", action = "Index", id = UrlParameter.Optional Verifique a URL de nossa aplicação de exemplo:
http://localhost:1153/Home/Index
Ou simplesmente:
16
Casa do Código
Capítulo 2. Entendendo a estrutura de uma aplicação ASP.NET MVC
http://localhost:1153/
Vale lembrar mais uma vez que Home e Index são valores padrão na rota pa-
drão do ASP.NET MVC. Opcionalmente, seria possível adicionar à URL um va-
lor chave para identificar algum objeto. Desta forma, poderíamos ter algo como http://localhost:1153/Home/Index/200 por exemplo. Entretanto, muito embora seja possível realizar tal adição, no caso do exemplo discutido não faz sentido fazê-lo, pois não estamos identificando de forma unitária algum elemento (como http://localhost: 1153/Clientes/Perfil/18556 ). Por este motivo, o último parâmetro da rota padrão é definido como opcional ( id = UrlParameter.Optional).
A figura 2.3 apresenta um esquema funcional que ilustra (de forma simplificada) o mecanismo de roteamento implementado pelo ASP.NET MVC.
Figura 2.3: Esquema do mecanismo de rotas do ASP.NET MVC
Modelo de roteamento que gera URLs semânticas"
Considere a seguinte URL: http://seusite.com/Conteudo.aspx?id=987511. A pergunta a ser realizada aqui é: é fácil memorizar uma URL como esta? A resposta, evidentemente, é não.
URLs como essa apresentada no parágrafo anterior são geradas automaticamente
pelos sistemas web para fazer referência de forma dinâmica aos conteúdos da aplicação. Muito embora não haja qualquer problema técnico (isto é, esta URL funciona perfeitamente) relacionado a este tipo de URL, se pensarmos na experiência do 17
2.5. Concluindo e desafiando
Casa do Código
usuário final ao interagir com ela, poderemos encontrar alguns problemas, dentre os quais se destacam: dificuldade de memorização e baixa legibilidade.
Além disso, é importante observar o impacto negativo destas URLs nas técnicas
de Search Engine Optimization (SEO) [2]. Note que os principais robôs de indexa-
ção de conteúdos de sites de busca (Google, Bing etc.), desconsideram URLs que apresentam alguns caracteres especiais, tais como: &, @, % etc.
Levando-se em consideração estes aspectos, ASP.NET MVC implementa através
do mecanismo de rotas o modelo de URLs amigáveis. Assim, além tornar a URL
da aplicação indexável para os robôs de busca, o framework melhora a experiência navegação do usuário, uma vez que é bem mais fácil de interagir com uma URL como http://seusite.com/Conteudos/Artigos/987511.