2017-04-03 112 views
2

我有一个C#Webform应用程序。ASP.NET无法使文件夹无法访问

它包含在它里面一个报告文件夹其中包含一些PDF文件。

我的应用程序将按需显示这些报告。

但我不希望有人通过键入URL直接

例如访问这些:www.abc.com/Reports/a.pdf

我创建了下面的Web.config中的报告文件夹中:

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

不过,测试时我可以直接访问pdf文件。

另外,根据业务规则,我无法使用表单身份验证。 ASP.NET管道,而不是IIS的

回答

3

<system.web>控制配置。如果您在IIS下运行,则不会为静态文件请求调用ASP.NET,例如您提到的PDF文件。

要拒绝这些请求使用<system.webServer>代替。看到这个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> 

注意<system.webServer>需要IIS7或更高版本(Windows Server 2008中)。如果你运行的是IIS6(Windows Server 2003或Windows XP),那么这将不起作用。

+0

测试您的解决方案... –

+0

我测试你的解决方案,但现在我不能从应用程序中访问文件。 –

+0

@SNash如果您的应用程序通过将*重定向到静态文件来提供文件,那么就不可能将请求过滤到文件。为了保护文件,应该让应用程序使用'Response.WriteFile'通过自己的代码返回文件(不要忘记设置Content-Type头)。 – Dai