如何拒绝使用ASP.NET Web配置访问文件,但不仅限于本地?

时间:2011-03-03 07:56:11

标签: asp.net web-config membership

我的ASP.NET Web配置文件有问题。我想拒绝某些用户或角色访问特定的PDF文件。我正在使用ASP.NET成员资格和角色管理系统。所以我将这行代码添加到Web.config文件中:

<location path="myfile.pdf">
    <system.web>
        <authorization>
            <allow roles="admin"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

并将其放入文件所在的目录中。现在,当我在本地系统中运行项目时,我无法访问PDF文件,而是以“admin”角色登录。但是当我在Web服务器上发布项目时,我无法浏览文件夹,但是当我浏览PDF文件的完整路径时,我可以查看PDF文件。所以:

我无法访问:http://www.example.com/folder

但我可以查看:http://www.example.com/folder/myfile.pdf

2 个答案:

答案 0 :(得分:11)

IIS可能在ASP.Net获得它之前提供PDF文件。假设您正在使用.Net 4.0,请将其添加到您的Web.config文件中以强制所有请求流向ASP.Net:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
<system.webServer>

答案 1 :(得分:2)

您需要让IIS将PDF请求转发给ASP.NET才能完成您的工作。

示例文章:

引用文章中的相关部分:

  

将PDF文件挂钩到Web中   IIS的应用程序

     

很容易测试自定义HTTP   Visual Studio内置的处理程序   网络服务器,卡西尼,因为所有   文档类型是自动的   在Web应用程序中处理   默认。但是,IIS需要一些   调整。 IIS将忽略发送   请求静态文档,例如   PDF文件,到ASP .NET网站   申请,而不是简单   满足要求。我们要   拦截请求并允许我们的   Web应用程序首先处理它。   为此,我们需要设置IIS   映射PDF文件(* .pdf),告诉   IIS将请求发送到我们的网站   应用。

     

在IIS 5/6中

     
      
  1. 打开Internet信息服务(IIS)管理器。
  2.   
  3. 对于Web应用程序,在“目录”选项卡上,单击“配置”   按钮。
  4.   
  5. 在“应用程序配置”窗口的“映射”选项卡上,   单击“添加”按钮添加新项   应用扩展映射。
  6.   
  7. 在“可执行文件”字段中,输入:C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll

  8.   
  9. 在“扩展名”字段中,输入:* .pdf

  10.   
  11. 选择所有动词并勾选脚本引擎并检查该文件   存在。
  12.         

    在IIS 7中

         
        
    1. 打开Internet信息服务(IIS)管理器。
    2.   
    3. 打开“处理程序映射”设置。
    4.   
    5. 添加托管处理程序。
    6.   
    7. 对于请求路径,请输入:* .pdf
    8.   
    9. 对于Type,选择应用程序的自定义HTTP处理程序。
    10.         

      IIS 7中的快捷方式,如   在文章上面提到的,是   在web.config中定义映射   在system.webServer处理程序中   部分,如下:

<system.webServer> 
... 
<handlers> 
<add name="PDF" path="*.pdf" verb="*" type="CustomFileHandlerDemo.Handlers.FileProtectionHandler" resourceType="Unspecified" /> 
... 
</handlers> 
</system.webServer>
  

网络上的上述代码   应用程序的web.config将   自动将条目添加到   IIS 7处理程序映射部分。

     

上述步骤可能有所不同   在您的IIS版本上,但应该是   类似于添加文档映射   到Web应用程序。一旦   已配置,请求PDF文档   将被发送到网络应用程序,   您可以在哪里处理请求   在允许访问之前。

     

请记住,在Visual Studio的内置中   Web服务器,模块映射不是   所有文件请求都是必需的   通过Web应用程序,制作它   易于测试自定义http处理程序。

因为您不使用自定义处理程序,所以您只需将处理程序设置为ASP.NET默认处理程序。这与IIS中已经设置为“.aspx”的处理程序相同。