Olá moçada!

Hoje gostaria de falar sobre um assunto sobre o qual postei na semana passada… URL´s amigáveis e ASP.net. No post anterior mostrei como criar um httpModule para gerenciar as requisições no IIS para trabalhar com websites de forma a eliminar a necessidade da utilização de parâmetros como ?cod=234&id=57&feio=S.

Bom, eu não quiz extender demais o assunto, já que aquele post ficou grande pra caramba por conta da exposição do código e comentários. Então ficou para este post uma explicação fundamental para quem quizer implementar este recurso… e espero que neste meio tempo (pouco mais de uma semana) ninguém tenha perdido os cabelos tentando fazer o código funcioanr no IIS. Digo isso porque o código funciona corretamente no built-in web server (FileSystem)… ou seja você foi codificação no Visual Studio 2008, vendo o seu lindo website com URL´s amigáveis rodando maravilhosamente bem até o momento em que você dá um PUBLISH no website para o servidor e então leva um susto: “ERRO 404” para todo lado.

Isso acontece porque o IIS 6 só chama o ASP.Net para tratar as requisições para as extensões de arquivo que ele conhece, ou seja, se sua URL não termina com nenhum “.aspx” ele vai entender que você deve estar tentando acessar uma pasta qualquer e vai procurar por padrão um “default.aspx” que não existe… e portanto: “ERRO 404”. Na verdade seu código bonitinho nem chegou a ser executado.

Existem algumas formas de resolver isso. Vou mostrar aquela que considero mais fácil e que não implica na alteração do código nem das URL´s mapeadas. Você pode adicionar no IIS um Wildcard Mapping (ou mapeamento curinga em bom português). O que isso quer dizer? Basicamente, como falei agora a pouco…  o IIS chama o ASP.net para tratar as requisições de extensões de arquivo que ele conheça, porém quando você adiciona um Wildcard Mapping, estas requisições são todas processadas por ele independente da extensão. Não há qualquer problema em fazer este tipo de implementação, é claro que como todas as requisições serão tratadas pelo ASP.net isso pode acarretar uma perda de performance. É claro que eu acho que só seria visível essa perda de performance em sistemas muito estressados, pois não percebi nenhuma baixa de performance em meu aplicativo ainda, mas fica o aviso.

Para configurar o Wildcard Mapping faça o seguinte:

  1. Abra o Gerenciador do IIS, clique com o botão direito no aplicativo, vá para “Propriedades” e, em seguida, na guia “Home Directory”, clique em “Configuração”.
  2. Na caixinha de Wildecard Application Maps, clique em “Inserir” (veja na imagem, pois está em destaque).
  3. Em seguida, digite “C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Aspnet_isapi.dll” (ou onde estiver instalado o framework) para “Executável”, e desmarque a opção de checkbox “Verifique se o arquivo já existe”.

Pronto! Agora o IIS 6 está funcionando igual o FileSystem do VS2008.

Abração!