Por exemplo ao acessar um produto de um Site geralmente encontrávamos algo como:
http://site.programandosolucoes.com/produto.aspx?codigo=1
Porém com a evolução das tecnologias e principalmente dos motores de pesquisa até mesmo a URL para acesso ao Site deve identificar o seu conteúdo para que sua indexação seja a melhor possível. Sendo assim, passamos a encontrar URLs como a seguinte:
http://site.programandosolucoes.com/produto/Marca-do-produto/nome-do-produto/Visualizar.aspx
Estamos falando em utilizar componentes que auxiliem a tratar URLs com informações e criar assim formas alternativas de acesso do que tínhamos até pouco tempo atrás. Isso é utilizado principalmente em blogs, sites de notícias e sites de vendas, por exemplo.
Para isso temos nas novas versões do ASP.NET a funcionalidade RewritePath do componente HttpContext que possibilita tratar a troca do endereço novo (com informações) para o antigo (com passagem de parâmetros) sem que o usuário final perceba isso. Sendo assim, visualmente a URL com informações do conteúdo sempre leva para a mesma página antiga (funcionam os 2 mecanismos).
Para o exemplo estaremos utilizando um Site de vendas de produtos que aceitará o nome do produto no endereço.
Uma das soluções é construirmos um novo módulo (realizando a interface IHttpModule) que irá receber a URL com as informações e irá traduzir para o formato que o sistema espera. Partindo sempre do pressuposto que as regras são definidas sobre valores únicos (descrições na URL são únicas) e apontam sempre para um mesmo conteúdo. Exemplo do código fonte utilizado:
1: public class UrlRewrite : IHttpModule
2: {
3: #region IHttpModule Members
4:
5: public void Dispose()
6: {
7: //
8: }
9:
10: public void Init(HttpApplication context)
11: {
12: context.BeginRequest += new EventHandler(context_BeginRequest);
13: }
14:
15: void context_BeginRequest(object sender, EventArgs e)
16: {
17: HttpContext context = ((HttpApplication)sender).Context;
18: string path = context.Request.Path.ToUpperInvariant();
19: string url = context.Request.RawUrl.ToUpperInvariant();
20:
21: if (url.Contains("/PRODUTO/"))
22: {
23: string[] parameters = url.Substring(url.IndexOf("/PRODUTO/")+1).Split('/');
24: string type = parameters[0];
25: string product = parameters[1];
26: string operation = parameters[2];
27:
28: if (type.Equals("PRODUTO") && operation.Contains("VISUALIZAR"))
29: {
30: context.RewritePath("~/Produto.aspx?id=" + Data.Product.GetProductByDescription(product).Id);
31: }
32: }
33: }
34:
35: #endregion
36: }
* Nesse exemplo está sendo utilizada somente a extensão ".aspx" por ser mais simples de exemplificar. Para tratar URLs com outras extensões é necessário configurar o IIS para tratar a extensão escolhida utilizando o componente do ASP.NET "c:\windows\...\aspnet_isapi.dll".
Segue abaixo vídeo que exibe passo-a-passo a solução:
Código fonte para download: clique aqui
Detalhes do ambiente de desenvolvimento
- Linguagem: C#
- Framework: .NET Framework 3.5 SP 1
- Ferramenta: Visual Studio 2008 Development Edition
- Sistema Operacional: Windows XP SP2
Nenhum comentário:
Postar um comentário