Domanda

Ho un sito web che contiene un .net IHttpModule ho scritto per fare alcuni compiti (autorizzazione, ecc). Ma all'interno del sito ci sono una serie di directory virtuali che vengono mappati per applicazioni di terze parti che purtroppo non posso cambiare o spostare (ad esempio forum Server Community, adxstudio CMS e altri).

Sto cercando un modo per evitare che il mio IHttpModule esecuzione quando le richieste sono fatte per il contenuto di tali directory virtuali. È possibile?

[Modifica - aggiunta la seguente]

Ho avuto modo di sperimentare con l'aggiunta <remove name="X"/> all'interno del nodo <httpModules> nei file Web.config nelle applicazioni di directory virtuale, ma non sembra di lavorare fuori. Probabilmente non è una grande soluzione o perché le applicazioni di terze parti possono essere aggiornate in modo da non voglio richiedere modifiche al proprio codice / configurazione.

Ho anche provato ad aggiungere un <location path="." inheritInChildApplications="false"> intorno al mio nodo <system.web> nel web.config genitore, ma che anche non sembrano funzionare.

[Modifica di nuovo - ha aggiunto più]

Il motivo è non funziona è perché Init del IHttpModule viene sparato solo una volta per ciclo di vita dell'applicazione (piuttosto che per richiesta come avevo ipotizzato). Dal momento che aggiungo un po 'di listener di eventi nell'evento Init questi sono ancora sparato durante le richieste successive ...

È stato utile?

Soluzione

Se si dispone di un elenco di queste directory e dei loro percorsi virtuali, è possibile costruire una ricerca di loro.

Per ogni HttpRequest che fa scattare il modulo, è possibile controllare il percorso virtuale per vedere se si appartiene ad uno qualsiasi degli percorso nella ricerca. Se sì, è possibile fare nulla o uscire codice del modulo.

PS: Per problema di prestazioni, probabilmente desidera memorizzare la ricerca nello stato di applicazione (ad esempio hashmap etc)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top