Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 20191|Resposta: 0

[ASP.NET] Asp.Net introdução do IHttpHandler

[Copiar link]
Publicado em 13/03/2018 21:40:17 | | | |
Asp.Net introdução do IHttpHandler
ASP.NET duas interfaces de processamento comumente usadas ao responder a requisições Http são IHttpHandler e IHttpModule.

Em geral, o IHttpHandler é usado para lidar com um tipo específico de requisição, como o processamento separado de cada arquivo *.asp, *.aspx. O IHttpModule geralmente é usado para lidar com operações comumente exigidas para a solicitação, como realizar algumas das mesmas verificações na página da solicitação.

Vamos dar uma olhada nas etapas de processamento do servidor IIS ao fazer a requisição HTTP correspondente. ASP.NET possui o conceito de pipeline, o que significa que cada requisição ASP.NET terá uma série de operações correspondentes no IIS para formar uma sequência semelhante a uma linha.

ASP.NET introdução ao pipeline

Vamos dar uma olhada no diagrama de tempo de processamento do pipeline:




Como pode ser visto na figura, após a chegada da solicitação, a implementação é processada pelo HttpModule e então o método ProcessRequest() do HttpHandler é chamado para dar a resposta específica. Portanto, não é difícil entender por que o tratamento de requisições específicas de classe é colocado na classe HttpHandler enquanto se fazem algumas verificações comuns a todas as solicitações no HttpModule.

Prática de código
IHttpHandler

O autor recentemente se deparou com o uso do IHttpHandler para lidar com chamadas de interface de cliente no projeto, então vamos discutir brevemente o design simples da interface baseado no IHttpHandler.

A interface IHttpHandler tem apenas dois membros:


O atributo IsReusable identifica se o objeto HttpHandler pode ser usado por outras instâncias, e geralmente o definimos como True. O método ProcessRequest() é uma resposta específica à solicitação, e só precisamos colocar a operação específica de lógica de negócio aqui.

Primeiro, crie um novo projeto web e adicione uma classe Handler:

A classe RayHandler implementa a função ProcessRequest() da interface IHttpHandler, que é apenas uma saída direta de um pedaço de texto.

Depois, precisamos adicionar a seguinte configuração no arquivo Web.config:


path indica correspondência de URLs, como *.ray, o que significa que o Handler responderá a requisições de URL terminadas em ".ray", verb indica o método de requisição, como Get/Post, e * significa que corresponde a todos. type indica o tipo da classe Handler, WebApplication2.RayHandler é o nome da classe, WebApplication2 refere-se ao nome do assembly no diretório Bin, por exemplo, o nome assembly no exemplo é WebApplication2.dll, e não há necessidade de definir um nome de sufixo aqui.

Inicie o site, insira a URL terminando em ".ray" e você verá o seguinte resultado:



Visão geral da fábrica do IHttpHandlerFactory

Às vezes podemos precisar lidar com múltiplos sufixos diferentes, um deles correspondendo a uma classe Handler, e é assim que nosso arquivo Web.config se apresenta:


Se tivermos muitas classes de implementação do HttpHandler, então nossa configuração de arquivos Web.config certamente vai parecer detalhada. Ou, em alguns casos, quando só conseguimos determinar qual Handler responde quando o programa está rodando, precisamos usar IHttpHandlerFactory.

O IHttpHandlerFactory é definido da seguinte forma:


Entre eles:

GetHandler(): Retorna uma instância que implementa a interface IHttpHandler;
ReleaseHandler(): Permite que o Factory reutilize uma instância Handler existente.
Pegue os pedidos ray e rss acima como exemplo, implemente a classe Factory:

Nesse caso, a configuração no Web.config é a seguinte:


Neste momento, a função de usar a classe Factory para corresponder a diferentes manipuladores específicos é implementada, simplificando a configuração.

Fábrica Escalável IHttpHandlerFactory

Na implementação acima, se o programa precisar adicionar um novo método de tratamento de sufixos no futuro, ele precisa modificar a instrução Switch em GetHandler(), o que também pode causar erros ou trazer outros riscos de segurança. Então, é possível manter a classe HandlerFactory inalterada para extensões subsequentes?

A resposta é definitivamente sim. Leitores que conhecem o padrão de design devem entender que este é um padrão simples de fábrica, e para alcançar as funções anteriores, podemos usar o modo de design chamado advanced points.

E aqui, também podemos usar a característica de linguagem da linguagem C# - reflexão. Por meio do mecanismo de reflexão de C#, refletimos o tipo Hanlder correspondente de acordo com o sufixo da URL, desde que concordemos com a correspondência entre o nome do sufixo da URL e o nome da classe do Handler.

Por exemplo, reescrevemos GetHandler() da seguinte forma:

Nesse caso, você só precisa colocar a classe Handler no método sob o mesmo namespace da classe HandlerFactory e configurá-la corretamente no Web.config. Por exemplo, se existir uma classe RayTHandler, então a seguinte configuração deve ser adicionada para combinar automaticamente:



resumo
Este artigo apresenta brevemente o uso do IHttpHandler em ASP.NET, fornece a implementação do IHttpHandlerFactory no processamento de múltiplas requisições Handler e, por fim, melhora uma implementação escalável de múltiplos requests Handler usando o mecanismo de reflexão do C#.





Anterior:asp.net Significado explicativo do HttpContext
Próximo:asp.net interface do IHttpModule é explicada em detalhes
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com