【问题标题】:Custom VirtualPathProvider unable to serve URLs ending with a directory自定义 VirtualPathProvider 无法提供以目录结尾的 URL
【发布时间】:2010-01-20 21:29:29
【问题描述】:

作为 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

【问题讨论】:

  • 你在 IIS6 中有星型映射来将所有请求映射到 ASP.NET 吗?
  • 我不确定,所以我想这意味着没有。我该怎么办?

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


【解决方案1】:

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

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

【讨论】:

  • 对于 ASP.NET 开发服务器也可以这样做吗?
猜你喜欢
  • 2011-02-28
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 2012-05-24
相关资源
最近更新 更多