2014-04-17 25 views
6

Ho scritto un httphandler per intercettare tutti i file PDF richiesti tramite URL da una cartella specifica e reindirizzare l'utente alla pagina di accesso. Se l'utente è autenticato, il file può essere scaricato. Il mio web.config ha la seguente voce per l'intercettazionecome scrivere httphandler per intercettare solo i file in una cartella specifica

<httpHandlers> 
<add verb="*" path="/calderdale/*.pdf" 
    type="NES.HiLo.Security.CalderDaleAuthenticationHandler, NES.HiLo.Security" /> 
</httpHandlers> 

In IIS (6.0) Impostazioni di estensione Application ho aggiunto un ambiente con eseguibile C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll ed estensione Pdf.

Questo funziona ma ogni richiesta di file pdf viene intercettata piuttosto che i file presenti nella directory calderdale.

Ho provato le soluzioni fornite su questo collegamento Mapping specific folder to HttpHandler in web.config e rimosso le impostazioni dell'estensione dell'applicazione, ma il gestore riceve la chiamata.

Qualche idea?

+0

È possibile utilizzare il httpModule anziché httpHandler. –

+0

Non riesco a utilizzare i httpmodules poiché possiamo usare solo httphandler per proteggere i file tramite gestori. per esempio. www.domainname.com/foldername/somefile.doc aprirà il file indipendentemente dalla presenza di httpmodule – rumi

+0

@Learner il link che hai detto di mettere un altro file web.config nella cartella, il fatto che tu abbia path = "/ calderdale/* .pdf "suggerisce che non hai fatto ciò che la risposta accettata dice di fare, cioè metti il ​​web.config nella cartella 'calderdale' e cambia percorso per essere path =" *. pdf " –

risposta

5

aggiungere questo alla tua configurazione web principale:

<location path="static"> 
    <system.web> 
    <httpHandlers> 
     <add verb="GET,HEAD" path="*.*" 
      type="NES.HiLo.Security.CalderDaleAuthenticationHandler, NES.HiLo.Security" /> 
    </httpHandlers> 
    </system.web>  
</location> 
6

Credo che il trucco è quello di registrare solo l'HttpHandler per quella specifica directory. Questo può essere fatto spostando il contenuto system.web/httpHandlers in un nodo di posizione nel web.config. Per esempio:?

<location path="calderdale"> 

(system.web/httpHandlers content) 

</location> 
1

Scusate ma io sono un po 'confuso :) perché è necessario fare questo non è più semplice utilizzando provider di aspnet e proteggere questa cartella con login richiesto un semplice WebConfig con la logica di accesso/negare e si risolve il problema. quando alcuni cercano di navigare in quella directory non è possibile scaricare il file e verrà reindirizzato alla pagina di accesso. Fammi sapere se ho frainteso qualcosa.