2017-04-03 4 views
2

Ich habe eine C# Webform-Anwendung.ASP.NET fehlgeschlagen Ordner nicht zugänglich zu machen

Es enthält einen Berichtsordner Darin enthalten einige PDF-Dateien.

Meine Anwendung zeigt diese Berichte bei Bedarf an.

Aber ich will nicht, dass jemand diese für den Zugriff durch die direkte URL

Eg eingeben: www.abc.com/Reports/a.pdf

Ich habe die folgende Web.config innerhalb des Berichtsordner :

<configuration> 
<system.web> 
      <authorization> 
       <deny users="?" />     
      </authorization> 
</system.web> 
</configuration> 

Noch, beim Testen kann ich direkt auf PDF-Dateien zugreifen.

Auch pro Geschäftsregeln kann ich Formularauthentifizierung nicht verwenden.

Antwort

3

<system.web> steuert die Konfiguration der ASP.NET-Pipeline, nicht von IIS. Wenn Sie unter IIS ausgeführt werden, wird ASP.NET nicht für statische Dateianforderungen wie die von Ihnen erwähnte PDF-Datei aufgerufen.

Um diese Anfragen zu verweigern, verwenden Sie stattdessen <system.webServer>. Sehen Sie diese QA: How to make IIS7 stop serving a folder?

<configuration> 
    <system.webServer> 
     <security> 
      <requestFiltering> 
       <hiddenSegments> 
        <add segment="My_Directory" /> 
       </hiddenSegments> 
      </requestFiltering> 
     </security> 
    </system.webServer> 
</configuration> 

Beachten Sie, dass <system.webServer> erfordert IIS7 oder höher (Windows Server 2008). Wenn Sie IIS6 (Windows Server 2003 oder Windows XP) ausführen, funktioniert dies nicht.

+0

Testen Sie Ihre Lösung ... –

+0

Ich teste Ihre Lösung, aber jetzt kann ich nicht über die App auf die Datei zugreifen. –

+0

@SNash Wenn Ihre Anwendung die Datei per * Weiterleitung * an die statische Datei bereitstellt, ist es unmöglich, Anforderungen an die Dateien zu filtern. Um die Dateien zu schützen, sollten Sie die Anwendung stattdessen die Dateien mit Hilfe von 'Response.WriteFile' durch Ihren eigenen Code zurückgeben (vergessen Sie nicht, auch den Header' Content-Type' zu ​​setzen). – Dai

Verwandte Themen