Início > Asp.net > Customizando o HttModule no Asp.Net

Customizando o HttModule no Asp.Net

12 de dezembro de 2009 Deixe um comentário Go to comments

Olá, neste artigo iremos ver como criar um módulo HTTP (httpmodule) customizado no asp.net. O pipeline HTTP é uma série de extensões de objetos que são iniciados pelo Asp.Net runtime no momento de processar uma solicitação o HTTP Handlers e o HTTP Modules são componentes .Net que servem como pontos principais de extensibilidade dos pipelines.

Bom todo módulo deve herdar da Interface IHttpModule que se encontra no namespace System.Web, por isso iremos seguir os seguintes passos:

1-) Crie um projeto do tipo ClassLibrary chamado Module.
2-) Adicione a referência System.Web.
3-) Exclua o arquivo class1.cs do seu projeto Module e crie uma nova classe com o nome de ModuleCustom, nesta classe peça para herdar da interface IHttModule.

public class ModuleCustom : IHttpModule

 

4-) Clique na interface e peça para implementar os métodos da mesma, repare que ele irá implementar o método Init e Dispose. Perceba que no método Init estamos recebendo como parâmetro um objeto do tipo HttpApplication, este objeto é passado automaticamente pelo runtime para o Module HTTP e é nele que iremos personalizar as ações (eventos) .

Quais eventos são e o que fazem os eventos do HttpApplication ?

Segue abaixo uma lista dos eventos e a respectiva descrição:

AcquireRequestState: chame este evento para permitir que o módulo obtenha ou crie o estado (por exemplo, a sessão) da solicitação.

AuthenticateRequest: chame este evento quando um módulo de segurança precisar autenticar o usuário antes que ele processe a solicitação.

AuthorizeRequest: chame este evento através de um módulo de segurança quando a solicitação precisar ser autorizada. Chamado após autenticação.

BeginRequest: chame este evento para notificar um módulo de que a nova solicitação está começando.

Disposed: chame este evento para notificar o módulo de que o aplicativo está sendo encerrado por algum motivo. Permite que o módulo execute uma limpeza interna.

EndRequest: chame este evento para notificar o módulo de que a solicitação está terminando.

Error: chame este evento para notificar o módulo de que ocorreu um erro durante o processamento da solicitação.

PostRequestHandlerExecute: chame este evento para notificar o módulo de que o identificador terminou o processamento da solicitação.

PreRequestHandlerExecute: chame este evento para notificar o módulo de que identificador da solicitação está prestes a ser chamado.

PreSendRequestContent: chame este evento para notificar o módulo de que o conteúdo está prestes a ser enviado ao cliente.

PreSendRequestHeaders: chame este evento para notificar o módulo de que os cabeçalhos HTTP estão prestes a serem enviados ao cliente.

ReleaseRequestState: chame este evento para permitir que o módulo libere o estado, pois o identificador terminou o processamento da solicitação.

ResolveRequestCache: chame este evento após a autenticação. Os módulos de cache usam este evento para determinar se a solicitação deve ser processada pelo cache ou por um identificador.

 UpdateRequestCache: chame este evento após receber uma resposta do identificador. Os módulos de cache devem atualizar o cache com a resposta

 

5-) Para nosso exemplo iremos utilizar o evento BeginRequest, por isso iremos criar um evento dentro de nossa classe e posteriormente associaremos este evento ao evento do HttpApplication.

namespace Module

{

    public class ModuleCustom : IHttpModule

    {

        private string Inicio;

        #region IHttpModule Members

 

        public void Dispose()

        {

            throw new NotImplementedException();

        }

 

        public void Init(HttpApplication context)

        {

            context.BeginRequest += new EventHandler(OnBeginRequestCustom);

        }

 

        protected void OnBeginRequestCustom(object o, EventArgs args)

        {

            HttpApplication app = o as HttpApplication;

            Inicio = string.Format("Hello: O BeginRequest começou a ser executado em {0}", DateTime.Now);

            app.Context.Response.Write(Inicio);

        }

 

        #endregion

    }

 

}

 

 

Note que no exemplo acima, criamos um evento customizado chamado OnBeginRequestCustom e este evento foi associado ao HttpApplication através do EventHandler. Dentro do nosso BeginRequest customizando, estamos pegando o valor de inicio da requisição.

6-) Compile o projeto, copie a DLL para o Bin do seu projeto Web ou para o Gac do Servidor.

7-) Para finalizar no web.config da sua aplicação altere a referência do httpmodule, neste momento iremos fazer referência a nossa dll.

    <configuration>

      <system.web>

        <httpModules>

          <add name="Module" type="Module.ModuleCustom, Module" />

        </httpModules>

      </system.web>

    </configuration>

 

 

Nota: No caso da dll estar no gac é necessário referenciar no type o public key token.

😎 Agora basta testar o seu projeto.

 

Espero que este post seja útil.

 

Abraço,

Categorias:Asp.net
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: