Criando urls pra web 2.0

Ramon Durães (e-mail) possui larga experiência em tecnologia Microsoft. Microsoft Most Valuable Professional (MVP), Associate Mentor na 2pc Professional Computing (http://www.2pc.com.br/), onde atua como Arquiteto de soluções. Fundador do grupo de usuários Mutex (http://www.mutex.com.br/). Escreve artigos e ministra treinamentos, além de realizar palestras nos maiores eventos do Brasil.

Artigo recomendado para Visual Studio 2005 SP1

A Web 2.0 está modificando completamente a forma com a qual estávamos acostumados a divulgar nossas páginas. Antigamente fazíamos um cadastro com palavras chaves nos principais portais de busca de contéudo, e agora os mesmos passaram a indexar completamente todo conteúdo favorecendo as páginas com muitas referências.

Os novos motores de busca varrem todos os links relacionados e, mesmo que você não cadastre seu site, ele pode ser indexado porque alguém inseriu seu link no site dele. Essa dinâmica está envolvendo novas tecnologias e comportamentos como o uso do AJAX. A proposta desse artigo é modificar as urls tradicionais de sua aplicação que passam parâmetros para novas urls que já incluem no caminho da mesma. Isso fará com que seu site seja visualizado mais vezes pelos motores de busca por que eles vão entender que o site possui várias paginas 'Url virtuais' conforme Tabela 01.

Url Original: http://localhost/meusite/produtos.aspx?Codigo=75
Url Modificada: http://localhost/meusite/produtos/75

Tabela 0: Modificando urls tradicionais.

Na prática, o que estaremos fazendo é enganar os motores de busca usando o httpmodules do asp.net para tratar uma url que não existe em nosso site (http://localhost/meusite/produtos/75) e responder com outra url internamente com a informação solicitada. Com isso, uma página com 100 parâmetros se comporta como se fossem 100 páginas. Esse truque pode ser usado para diversas outras finalidades, inclusive para urls temporárias exclusivas para um usuário logado.

Para iniciar nosso artigo, crie um projeto > C# > ASP.NET Web Application (WebRewrite) e adicione um novo arquivo: Projeto > Add > New Item > Class com o nome de ProfessionalComputing.goUrl.cs.

O objetivo desse arquivo é codificar a classe goUrl que implementa a interface IHttpModule para interceptar todas as requisições que chegarem a aplicação e repassar para uma classe personalizada com objetivo de fazer o reWrite internamente caso necessário. Para essa classe daremos o nome de VerificaUrl. Nesse momento inicie a codificação da classe goUrl conforme listagem 1.

ProfessionalComputing.goUrl.cs

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace ProfessionalComputing { public class goUrl:IHttpModule { public virtual void Init(HttpApplication app) { app.BeginRequest += new EventHandler(this.Rewrite_BeginRequest); } public void Rewrite_BeginRequest(object s, EventArgs e) { try { ProfessionalComputing.Util.VerificaUrl.CheckUrl(((HttpApplication)s)); } catch (Exception exception1) {// throw new Exception("Falha tratando url"); } } #region IHttpModule Members public virtual void Dispose() { } #endregion } }

Listagem 01 - Implementando classe goUrl baseada no IHttpModule

Agora que você acabou de construir a classe goUrl, o funcionamento dela será muito simples. Ela vai interceptar as requisições de urls em nossa aplicação e, para cada requisição que chegar, vai executar nossa segunda classe chamada VerificaUrl que contém o método CheckUrl, responsável pela reescrita da url. Nesse momento adicione um novo arquivo tipo classe e coloque o nome ProfessionalComputing.Util.VerificaUrl.cs codificando conforme a listagem 02.

ProfessionalComputing.Util.VerificaUrl.csx

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace ProfessionalComputing.Util { public class VerificaUrl { public static void CheckUrl(HttpApplication app) { string origem = app.Request.Path.ToString().ToLower(); string urlsite = app.Request.ApplicationPath; if (origem.IndexOf("produto") > -1) { string[] parametros = origem.Split('/'); string codigo = parametros[2]; // você pode obtem na string origem app.Context.RewritePath(urlsite + "_Produto.aspx?Codigo=" + codigo); } } } }

Listagem 02 - Implementando a classe VerificaUrl.

Conforme você pode observar na listagem 02, nesse exemplo o processo é muito simples de ser implementado. Bastar obter a url de origem, verificar se você vai tratar a mesma e, caso positivo, fazer o ReWritePath() para o novo caminho.

Após implementar as classes, o próximo passo é modificar o web.config para que possamos adicionar referência a mesma conforme listagem 03, insira o código dentro do bloco <system.web>.

System.Web

<httpModules> <add type="ProfessionalComputing.goUrl,WebRewrite" name="goUrl" /> </httpModules>

Listagem 03 - Alterando web.config para suportar novo httpmodules.

Na listagem 03 estamos adicionando referência a classe goUrl e ao assembly que ela se encontra (bin\WebRewrite.dll). É o nome da aplicação web que chamamos de WebRewrite.

Com essa implementação, basta executar sua aplicação e digitar a url desejada, conforme esse exercício: se digitar a url: http://localhost:1759/produto/10 vai carregar internamente a url: http://localhost:1759/_Produto.aspx?Codigo=10 conforme figura 01. Para o usuário final ou site de busca o acesso é transparente.

url_1.jpg
Figura 01 - UrlRewrite em ação

Código Fonte: Download

Esse artigo foi baseado no banco de dados ''NorthWind" para listagem de produtos.

Obrigado e até a próxima!