Criando URLs legíveis em sites do Páginas da Web do ASP.NET (Razor)
por Tom FitzMacken
Este artigo descreve o roteamento em um site do Páginas da Web do ASP.NET (Razor) e como isso permite que você use URLs mais legíveis e melhores para SEO.
O que você aprenderá:
- Como ASP.NET usa o roteamento para permitir que você use URLs mais legíveis e pesquisáveis.
Versões de software usadas no tutorial
- Páginas da Web do ASP.NET (Razor) 3
Este tutorial também funciona com Páginas da Web do ASP.NET 2.
Sobre o roteamento
As URLs das páginas em seu site podem ter um impacto sobre o funcionamento do site. Uma URL "amigável" pode facilitar o uso do site pelas pessoas. Ele também pode ajudar com a SEO (otimização do mecanismo de pesquisa) para o site. ASP.NET sites incluem a capacidade de usar URLs amigáveis automaticamente.
ASP.NET permite criar URLs significativas que descrevem as ações do usuário em vez de apenas apontar para um arquivo no servidor. Considere estas URLs para um blog fictício:
http://www.contoso.com/Blog/blog.cshtml?categories=hardware
http://www.contoso.com//Blog/blog.cshtml?startdate=2009-11-01&enddate=2009-11-30
Compare essas URLs com as seguintes:
http://www.contoso.com/Blog/categories/hardware/
http://www.contoso.com/Blog/2009/November
No primeiro par, um usuário teria que saber que o blog é exibido usando a página blog.cshtml e, em seguida, teria que construir uma cadeia de caracteres de consulta que obtém a categoria ou o intervalo de datas correto. O segundo conjunto de exemplos é muito mais fácil de compreender e criar.
As URLs do primeiro exemplo também apontam diretamente para um arquivo específico (blog.cshtml). Se, por algum motivo, o blog fosse movido para outra pasta no servidor ou se o blog fosse reescrito para usar uma página diferente, os links estariam errados. O segundo conjunto de URLs não aponta para uma página específica, portanto, mesmo que a implementação ou o local do blog mude, as URLs ainda seriam válidas.
Em Páginas da Web do ASP.NET, você pode criar URLs mais amigáveis como aquelas nos exemplos acima porque ASP.NET usa roteamento. O roteamento cria um mapeamento lógico de uma URL para uma página (ou páginas) que pode atender à solicitação. Como o mapeamento é lógico (não físico, para um arquivo específico), o roteamento fornece grande flexibilidade na forma como você define as URLs para seu site.
Como funciona o roteamento
Quando ASP.NET processa uma solicitação, ela lê a URL para determinar como roteá-la. ASP.NET tenta corresponder segmentos individuais da URL aos arquivos no disco, indo da esquerda para a direita. Se houver uma correspondência, qualquer coisa restante na URL será passada para a página como informações de caminho.
Imagine que alguém faça uma solicitação usando esta URL:
http://www.contoso.com/a/b/c
A pesquisa é assim:
- Há um arquivo com o caminho e o nome de /a/b/c.cshtml? Nesse caso, execute essa página e não passe nenhuma informação para ela. Caso contrário...
- Há um arquivo com o caminho e o nome de /a/b.cshtml? Nesse caso, execute essa página e passe o valor
c
para ela. Caso contrário... - Há um arquivo com o caminho e o nome de /a.cshtml? Nesse caso, execute essa página e passe o valor
b/c
para ela.
Se a pesquisa não encontrou correspondências exatas para arquivos .cshtml em suas pastas especificadas, ASP.NET continua procurando por esses arquivos por sua vez:
- /a/b/c/default.cshtml (sem informações de caminho).
- /a/b/c/index.cshtml (sem informações de caminho).
Observação
Para ser claro, as solicitações de páginas específicas (ou seja, solicitações que incluem a extensão de nome de arquivo .cshtml ) funcionam exatamente como você esperaria. Uma solicitação como http://www.contoso.com/a/b.cshtml
executará a página b.cshtml muito bem.
Dentro de uma página, você pode obter as informações de caminho por meio da propriedade da UrlData
página, que é um dicionário. Imagine que você tenha um arquivo chamado ViewCustomers.cshtml e seu site receba esta solicitação:
http://mysite.com/myWebSite/ViewCustomers/1000
Conforme descrito nas regras acima, a solicitação irá para sua página. Dentro da página, você pode usar código como o seguinte para obter e exibir as informações do caminho (nesse caso, o valor "1000"):
<!DOCTYPE html>
<html>
<head>
<title>URLData</title>
</head>
<body>
Customer ID: @UrlData[0].ToString()
</body>
</html>
Observação
Como o roteamento não envolve nomes de arquivo completos, pode haver ambiguidade se você tiver páginas com o mesmo nome, mas extensões de nome de arquivo diferentes (por exemplo, MyPage.cshtml e MyPage.html). Para evitar problemas com o roteamento, é melhor garantir que você não tenha páginas em seu site cujos nomes diferem apenas na extensão.
Recursos adicionais
WebMatrix - URLs, UrlData e Roteamento para SEO. Esta entrada de blog de Mike Brind fornece alguns detalhes adicionais sobre como o roteamento funciona em Páginas da Web do ASP.NET.