自定义VirtualPathProvider无法提供以目录结尾的URL

时间:2010-01-20 21:29:29

标签: asp.net iis iis-6 content-management-system virtualpathprovider

作为CMS的一部分,我创建了一个自定义VirtualPathProvider,它旨在提供单个文件来代替实际的文件结构。我设置它,如果服务器上实际存在文件,那么将提供该文件。如果该文件不存在,则将代替为该地址存储的虚拟内容。这类似于从存储在数据库中的文件提供网站的概念,但在这种情况下,内容存储在服务器上的XML文件中。

当对特定页面发出请求时,此设置可以正常工作。例如,如果我要求“www.mysite.com/foobar.aspx”,将提供为“foobar.aspx”存储的内容。此外,如果我要求“www.mysite.com/subdir/foobar.aspx”,也会提供相应的内容。

问题在于:如果我要求“www.mysite.com/foobar”这样的东西,事情就会开始崩溃。如果该目录存在于磁盘上(并且在IIS中没有配置的默认页面,例如index.aspx),我将收到“目录列表被拒绝”错误。如果目录不存在,我只会得到404 - 资源未找到。

我尝试了几件事,到目前为止,我所做的一切都没有带来任何影响。似乎IIS只是注意到目录(或现有目录中的默认文件)不存在并提供自己的错误代码,而没有询问我的应用程序如何处理请求。如果它确实进入了应用程序,我将能够解决问题,但就目前而言,我很遗憾。有没有人知道IIS中是否存在导致此问题的设置?

我已经找到了我能找到的关于这个主题的所有资源,而且我是空的。我知道这应该是可能的,因为我已经阅读了有关从数据库和ZIP文件提供内容的教程。帮助!

p.s。,我正在运行IIS6和.NET 3.5

1 个答案:

答案 0 :(得分:2)

IIS只会将请求传递给ASP.NET进程,如果它被配置为针对特定扩展名执行此操作。默认为aspx,ascx等。换句话说,如果您请求.html文件,ASP.NET将永远不会看到该HTTP请求。同样对于空扩展。

要更改此行为,请将通配符映射添加到ASP.NET进程。加载IIS管理器,转到您的网站的“属性”,然后查看“主目录”选项卡。单击“配置”,您将看到扩展到应用程序映射。