Artigo: 307996 - Última revisão: quinta-feira, 15 de Julho de 2004 - Revisão: 3.6

Como criar um módulo de HTTP do ASP.NET utilizando 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.

Nesta página

Expandir tudo | Reduzir tudo
Este artigo passo a passo demonstra como utilizar o Visual C# .NET para criar um módulo HTTP personalizado, simples. Este artigo demonstra como criar, implementar e configurar o módulo, bem como ligar um evento para o módulo no ficheiro global.asax.

Mais Informação

Implementar o módulo

  1. Crie um novo projecto de Visual Studio .NET C# biblioteca de classes denominado MyModule.
  2. Defina uma referência à assemblagem de System.Web.dll .
  3. Adicione a seguinte directiva à classe:
    using System.Web;					
  4. Mudar o nome da classe SyncModule.cs e altere a definição de classe para reflectir esta.
  5. Implementa a interface IHttpModule . A definição de classe deve aparecer da seguinte forma:
    public class SyncModule : IHttpModule					
  6. Decida para os eventos que subscreveu. A lista seguinte descreve os eventos disponíveis do objecto HttpApplication aos quais pode subscrever:
    • AcquireRequestState : chamada este evento para permitir que o módulo adquirir ou criar o estado (por exemplo, sessão) para o pedido.
    • AuthenticateRequest : chamada este evento quando um módulo de segurança tem de autenticar o utilizador antes de processar o pedido.
    • AuthorizeRequest : chamada este evento por um módulo de segurança quando o pedido necessita de ser autorizado. Chamado após a autenticação.
    • BeginRequest : Este evento para notificar um módulo está a iniciar esse novo pedido de chamada.
    • Disposed : chamada este evento para notificar o módulo que a aplicação é final por alguma razão. Permite que o módulo efectuar a limpeza interna.
    • EndRequest : chamada este evento para notificar o módulo que o pedido é final.
    • erro : Este evento para notificar o módulo de erro que ocorre durante o processamento de pedidos de chamada.
    • PostRequestHandlerExecute : chamada este evento para notificar o módulo que o processador terminou de processar o pedido.
    • PreRequestHandlerExecute : chamada este evento para notificar o módulo que o processador para o pedido está prestes a ser chamado.
    • PreSendRequestContent : chamada este evento para notificar o módulo que conteúdo está prestes a ser enviado ao cliente.
    • PreSendRequestHeaders : chamada este evento para notificar o módulo que os cabeçalhos de HTTP estão prestes a ser enviado ao cliente.
    • ReleaseRequestState : chamada este evento para permitir que o módulo de estado de lançamento porque o processador terminou de processar o pedido.
    • ResolveRequestCache : chamada este evento depois da autenticação. Colocação em cache módulos utilizar este evento para determinar se o pedido deve ser processado pela respectiva cache ou se uma rotina de tratamento deve processar o pedido.
    • UpdateRequestCache : chamada este evento depois da rotina de tratamento de uma resposta. Colocação em cache módulos deverá actualizar a respectiva cache com a resposta.
    Este exemplo utiliza o evento BeginRequest .
  7. Implementar os métodos de início e a venda/abate da interface IHttpModule da seguinte forma:
    public void Init(HttpApplication app)
    {
       app.BeginRequest += new EventHandler(OnBeginRequest);
    }
    
    public void Dispose(){ }					
  8. Criar um delegado para um evento da seguinte forma:
    public delegate void MyEventHandler(Object s, EventArgs e);					
  9. Definir uma variável local privada do tipo MyEventHandler para conter uma referência para o evento:
    private MyEventHandler _eventHandler = null;					
  10. Criar um evento que cria hooks até o delegado para o método no ficheiro global.asax ou classe que herda o objecto HttpApplication :
    public event MyEventHandler MyEvent
    {
       add { _eventHandler += value; }
       remove { _eventHandler -= value; }
    }					
  11. Criar o método OnBeginRequest , que cria hooks o 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 projecto.

Implementar o módulo

  1. Crie um novo directório em C:\Inetpub\Wwwroot com o nome do módulo.
  2. Crie um subdirectório chamado posição no directório de módulo recém-criado. O caminho resultante é C:\Inetpub\Wwwroot\Module\Bin.
  3. Copie MyModule.dll Bin\Debug do projecto para o directório C:\Inetpub\Wwwroot\Module\Bin.
  4. Siga estes passos para marcar o novo directório de módulo como uma aplicação Web:
    1. Abra o Gestor de serviços Internet.
    2. Clique com o botão direito do rato no directório de módulo e, em seguida, clique em Propriedades .
    3. No separador directório , clique em criar .
    4. Clique em OK para fechar a caixa de diálogo Propriedades do módulo .

Configurar o sistema

  1. No directório C:\Inetpub\Wwwroot\Module\, crie um novo ficheiro com o nome Web.config.
  2. Cole o seguinte texto em Web.config:
    <configuration>
       <system.web>
          <httpModules>
             <add name="MyModule" type="MyModule.SyncModule, MyModule" />
          </httpModules>
       </system.web>
    </configuration>					

Testar o módulo

  1. No directório C:\Inetpub\Wwwroot\Module, crie um novo ficheiro de .aspx chamado Test.aspx.
  2. Cole o seguinte texto num Test.aspx:
    <%@Page Language="C#"%>
    <% Response.Write("Hello from Test.aspx.<br>"); %>					
  3. No directório C:\Inetpub\Wwwroot\Module, crie um ficheiro global.asax.
  4. Cole o código seguinte no espaço de nomes do 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. Pedir a página Test.aspx. Deverá ver as seguintes linhas de texto: módulo
    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 de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
307985  (http://support.microsoft.com/kb/307985/EN-US/ ) INFO: Descrição geral de rotinas de tratamento HTTP e módulos HTTP do ASP.NET


A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbconfig kbhowtomaster kbhttpmodule kbhttpruntime kbweb KB307996 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 307996  (http://support.microsoft.com/kb/307996/en-us/ )