2

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

当向特定页面发出请求时,此设置可以完美运行。例如,如果我请求“www.mysite.com/foobar.aspx”,则会提供为“foobar.aspx”存储的内容。此外,如果我要求“www.mysite.com/subdir/foobar.aspx”,也会提供相应的内容。

问题是这样的:如果我要求像“www.mysite.com/foobar”这样的东西,事情就会开始崩溃。如果该目录存在于磁盘上(并且在 IIS 中没有配置默认页面,例如 index.aspx),我将收到“Directory Listing Denied”错误。如果该目录不存在,我将简单地得到一个 404 - Resource Not Found。

我已经尝试了几件事,到目前为止,我所做的一切都没有改变。似乎 IIS 只是简单地注意到不存在目录(或现有目录中的默认文件)并提供自己的错误代码,而从未询问我的应用程序如何处理该请求。如果它确实进入了应用程序,我将能够解决问题,但就目前而言,我很迷茫。有谁知道 IIS 中是否存在导致此问题的某些设置?

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

ps,我正在运行 IIS6 和 .NET 3.5

4

1 回答 1

2

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

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

于 2010-01-20T22:04:21.820 回答