Este artigo passo a passo demonstra como usar o Visual C# .NET para criar um módulo HTTP simples e personalizado. Este artigo explica como criar, implantar e configurar o módulo, e também como conectar um evento para o módulo no arquivo Global.asax.
Implementar o módulo
- Crie um novo projeto de biblioteca de classes do Visual Studio .NET C# chamado MyModule.
- Defina uma referência para a sub-rotina System.Web.dll.
- Adicione a seguinte diretiva à classe:
- Renomeie a classe SyncModule.cs e altere a definição de classe para refletir isso.
- Implemente a interface IHttpModule. Sua definição de classe deverá aparecer da seguinte maneira:
public class SyncModule : IHttpModule
- Decida em quais eventos você se inscreverá. A lista a seguir descreve os eventos disponíveis no objeto HttpApplication no qual você pode se inscrever:
- 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.
Este exemplo usa o evento BeginRequest. - Implemente os métodos Init e Dispose da interface IHttpModule, da seguinte maneira:
public void Init(HttpApplication app)
{
app.BeginRequest += new EventHandler(OnBeginRequest);
}
public void Dispose(){ } - Crie um representante para um evento, da seguinte maneira:
public delegate void MyEventHandler(Object s, EventArgs e);
- Defina uma variável particular local do tipo MyEventHandler para manter uma referência ao evento:
private MyEventHandler _eventHandler = null;
- Crie um evento que conecte o representante ao método no arquivo Global.asax ou à classe herdada do objeto HttpApplication:
public event MyEventHandler MyEvent
{
add { _eventHandler += value; }
remove { _eventHandler -= value; }
} - Crie o método OnBeginRequest, que se conecta ao evento BeginRequest de HttpApplication:
public void OnBeginRequest(Object s, EventArgs e)
{
HttpApplication app = s as HttpApplication;
app.Context.Response.Write("Hello from OnBeginRequest in custom module.<br>");
if(_eventHandler!=null)
_eventHandler(this, null);
} - Compile o projeto.
Implantar o módulo
- Crie um novo diretório em C:\Inetpub\Wwwroot chamado Module.
- Crie um subdiretório chamado Bin no diretório Module recém-criado. O caminho resultante será C:\Inetpub\Wwwroot\Module\Bin.
- Copie o arquivo MyModule.dll do diretório Bin\Debug do projeto para o diretório C:\Inetpub\Wwwroot\Module\Bin.
- Siga estas etapas para marcar o novo diretório Module como um aplicativo da Web:
- Abra o Gerenciador do Internet Services.
- Clique com o botão direito do mouse no diretório Module e clique em Propriedades.
- Na guia Directory, clique em Create.
- Clique em OK para fechar a caixa de diálogo Module Properties.
Configurar o sistema
- No diretório C:\Inetpub\Wwwroot\Module\, crie um novo arquivo chamado Web.config.
- Cole o seguinte texto no Web.config:
<configuration>
<system.web>
<httpModules>
<add name="MyModule" type="MyModule.SyncModule, MyModule" />
</httpModules>
</system.web>
</configuration>
Testar o módulo
- No diretório C:\Inetpub\Wwwroot\Module, crie um novo arquivo .aspx chamado Test.aspx.
- Cole o seguinte texto no Test.aspx:
<%@Page Language="C#"%>
<% Response.Write("Hello from Test.aspx.<br>"); %> - No diretório C:\Inetpub\Wwwroot\Module, crie um arquivo Global.asax.
- Cole o seguinte código no Global.asax:
<%@ Import Namespace="MyModule" %>
<script language="C#" runat=server >
protected void MyModule_OnMyEvent(Object src, EventArgs e)
{
Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>");
}
</script> - Solicite a página Test.aspx. As seguintes linhas de texto deverão ser exibidas:
Hello from OnBeginRequest in custom module.
Hello from MyModule_OnMyEvent called in Global.asax.
Hello from Test.aspx.
REFERÊNCIAS
Para obter informações adicionais sobre HttpHandlers, clique no número do artigo a seguir para exibi-lo no Microsoft Knowledge Base:
307985
(http://support.microsoft.com/kb/307985/
)
BETA-INFO: ASP.NET HTTP Modules and HTTP Handlers Overview