Pergunta

Eu tenho um site .net que contém um IHttpModule eu escrevi para fazer determinadas tarefas (autorização etc). Mas dentro do site, há uma série de diretórios virtuais que são mapeados para aplicativos de terceiros que infelizmente não pode alterar ou mover (por exemplo fóruns servidor da comunidade, adxstudio cms e outros).

Eu estou procurando uma maneira de evitar que o meu IHttpModule de correr quando as solicitações são feitas para o conteúdo desses diretórios virtuais. Isso é possível?

[Edit - acrescentou o seguinte]

Tenho feito experiências com a adição de <remove name="X"/> dentro do nó <httpModules> nos arquivos Web.config nos aplicativos de diretório virtual, mas não parece estar funcionando. Provavelmente não é uma grande solução seja porque os aplicativos de terceiros podem ser atualizados para que eu não quero exigir alterações ao seu código / configuração.

Eu também tentei adicionar um <location path="." inheritInChildApplications="false"> em torno de meu nó <system.web> no pai Web.config, mas que também não parecem funcionar.

[Editar novamente - acrescentou mais]

A razão é que não funciona é porque evento Init do IHttpModule só é acionado uma vez por ciclo de vida do aplicativo (em vez de pelo pedido como eu tinha assumido). Desde que eu adicionar um monte de ouvintes de evento no evento init estes ainda são disparados em solicitações subseqüentes ...

Foi útil?

Solução

Se você tem uma lista desses diretórios e seus caminhos virtuais, você pode construir uma pesquisa deles.

Para cada HttpRequest que desencadeia o módulo, você pode verificar o caminho virtual para ver se ele pertence a qualquer um o caminho na pesquisa. Se sim, então você pode não fazer nada ou sair código do seu módulo.

PS: Por problema de desempenho, você provavelmente vai querer armazenar a pesquisa no estado do aplicativo (por exemplo hashmap etc)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top