ID do artigo: 307996 - Última revisão: quarta-feira, 9 de abril de 2003 - Revisão: 2.0

PROCEDIMENTOS: Criar um módulo HTTP do ASP.NET usando o Visual C# .NET

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo foi publicado anteriormente em BR307996

Nesta página

Expandir tudo | Recolher tudo

Sumário

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

  1. Crie um novo projeto de biblioteca de classes do Visual Studio .NET C# chamado MyModule.
  2. Defina uma referência para a sub-rotina System.Web.dll.
  3. Adicione a seguinte diretiva à classe:
    using System.Web;
  4. Renomeie a classe SyncModule.cs e altere a definição de classe para refletir isso.
  5. Implemente a interface IHttpModule. Sua definição de classe deverá aparecer da seguinte maneira:
    public class SyncModule : IHttpModule
  6. 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.
  7. 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(){ }
  8. Crie um representante para um evento, da seguinte maneira:
    public delegate void MyEventHandler(Object s, EventArgs e);
  9. Defina uma variável particular local do tipo MyEventHandler para manter uma referência ao evento:
    private MyEventHandler _eventHandler = null;
  10. 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; }
    }
  11. 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);
    }
  12. Compile o projeto.

Implantar o módulo

  1. Crie um novo diretório em C:\Inetpub\Wwwroot chamado Module.
  2. Crie um subdiretório chamado Bin no diretório Module recém-criado. O caminho resultante será C:\Inetpub\Wwwroot\Module\Bin.
  3. Copie o arquivo MyModule.dll do diretório Bin\Debug do projeto para o diretório C:\Inetpub\Wwwroot\Module\Bin.
  4. Siga estas etapas para marcar o novo diretório Module como um aplicativo da Web:
    1. Abra o Gerenciador do Internet Services.
    2. Clique com o botão direito do mouse no diretório Module e clique em Propriedades.
    3. Na guia Directory, clique em Create.
    4. Clique em OK para fechar a caixa de diálogo Module Properties.

Configurar o sistema

  1. No diretório C:\Inetpub\Wwwroot\Module\, crie um novo arquivo chamado Web.config.
  2. 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

  1. No diretório C:\Inetpub\Wwwroot\Module, crie um novo arquivo .aspx chamado Test.aspx.
  2. Cole o seguinte texto no Test.aspx:
    <%@Page Language="C#"%>
    <% Response.Write("Hello from Test.aspx.<br>"); %>
  3. No diretório C:\Inetpub\Wwwroot\Module, crie um arquivo Global.asax.
  4. 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>
  5. 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















A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET Beta 2
  • Microsoft Visual C# .NET 2002 Standard Edition
Palavras-chave: 
kbhowto kbhowtomaster kbhttpruntime kbgrpdsasp KB307996