Seguindo no assunto HTTP MODULES, aqui vai uma dica muito importante.
Em um projeto que já estava no ar tivemos a necessidade de personalizar as páginas do site. Essa personalização seria efetuada exclusivamente nos itens de suporte do site (topo, rodapé, menu, breadcrumbs, ...). Todos esses itens se encontravam em uma MasterPage que estava aplicada ao site inteiro.
A idéia que apareceu então foi de fazer uma nova MasterPage personalizada e alterá-la dinamicamente. Para isso, seria necessário acessar o método Page_PreInit das páginas ASPX afetadas e inserir um código que fizesse essa alteração dinamicamente. No entanto, o site conta com algumas centenas de páginas e não queríamos ter o trabalho de alterar todas as páginas do site e subir todo o site novamente para o ar, o que nos obrigaria a testá-lo novamente.
O que foi feito então? Utilizamos um HTTP MODULE que acopla um método novo ao evento Page_PreInit das páginas. O roteiro seguido foi bem parecido com o utilizado no exemplo do POST Autenticando Usuários com HTTP MODULE . Portanto, não vou reescrever os passos para criar o HTTP MODULE. Acessem este POST e terão todo o passo a passo.
Abaixo, segue o código da classe MasterPageModule .cs , que é a base do HTTP MODULE:
------------------------------------------------------------------------
using System;
using System.Web;
using System.Web.UI;
public class MasterPageModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
//o codigo abaixo adiciona o método page_alterarMasterPage ao evento PreInit da Página
//com isso, esse método será executado juntamente com o método Page_PreInit de todas as Páginas
page.PreInit += new EventHandler(page_alterarMasterPage);
}
}
void page_alterarMasterPage(object sender, EventArgs e)
{
//o código abaixo alterar a MasterPage da página ASPX para masterPagePersonalizada.master
Page page = sender as Page;
page.MasterPageFile = "masterPagePersonalizada.master";
}
public void Dispose()
{
}
}
------------------------------------------------------------------------------------------------
Abraços e até a próxima
Fernando D'Angelo