2012-05-29 11 views
5

Ho alcuni file nella mia cartella Contenuto che non voglio che un utente possa scaricare senza essere autorizzato. Come posso impedire a un utente di accedere al file semplicemente digitando ... Content/{filename} nella barra degli indirizzi?Protezione delle cartelle in MVC

risposta

3

Ci sono un paio di possibilità. Il primo consiste nella utilizzando il tag <location> nel web.config:

<location path="Content"> 
    <system.web> 
     <authorization> 
      <deny users="?" /> 
     </authorization> 
    </system.web> 
</location> 

Un'altra possibilità è quella di mettere i file all'interno di una cartella in cui nessuno può accedere (come la cartella App_Data per esempio) e poi hanno un azione di controllo questo servirà quei file che saranno decorati con l'attributo [Authorize].

+0

Dove sarebbe questo essere situato nel web. config? – user517406

+0

All'interno dell'elemento '' e all'esterno ''. È alla radice. –

+1

OK grazie, non ha funzionato subito come dovrebbe essere not :) – user517406

0

Beh un modo è quello di avere al di fuori del contesto di IIS, così invece di averli sotto C:\inetpub\wwwroot

cambiamento a qualcosa come C:\temp\files.

nel proprio DB dispone di un GUID associato al nome del documento e utilizza il GUID per visualizzare il collegamento al file.

nell'azione del controller, si accetterà il GUID, otterrà il nome file e servirà il file nella risposta.

1

non funziona per me.

<configuration> 
    <appSettings> 
    ... 
    </appSettings> 
    <system.web> 
    ... 
    </system.web> 
    <system.webServer> 
    ... 
    </system.webServer> 
    <location path="Content"> 
     <system.web> 
      <authorization> 
       <deny users="?" /> 
      </authorization> 
     </system.web> 
    </location> 
</configuration> 

eseguo il mio MVC applicazione 4.0, di login e logout, non possono accedere a qualsiasi pagina app, ma ancora in grado di accedere al file dal link diretto come

http://localhost:80966/Content/Files/home.jpg 
Problemi correlati