2

我正在尝试创建一个虚拟文件。例如,我有一个组件从数据库中获取具有给定 ID 的 CMS 页面。现在我有一个 url /hello/world/,我想将页面解析/hello/world/到我ContentPlaceHolderMasterPage.

IHttpModule我能够捕获 URL,并且我可以将其重写为一个 fysical 文件。

那只是第 1 步,现在我需要加载一个不存在的虚拟页面。因此我不认为我可以使用app.Context.RewritePath(),因为这需要服务器上的一个 fysical 文件。

问:有什么方法可以在 aContentPlaceHolder中呈现我的 CMS 页面组件Masterpage?没有fysical文件?

我确实有一个关于组合 IHttpModule 并将文件重写为.cmspage扩展名,然后使用 aIHttpHandler来捕获该文件扩展名并加载我的组件的想法,但这看起来还没有完成?

4

1 回答 1

0

当您调用 ASP.NET 页面时,IIS 使用默认值VirtualFileProvider从 IO 加载文件,如果文件不在路径中,则会引发异常。好消息是您可以实现自定义提供程序并添加提供程序。因此,如果文件在 IO 中不存在,您可以从任何您想要的地方加载您自己的内容(从数据库加载,其他文件,...)。

您可以使用它来加载虚拟 ascx、aspx 和所有 ASP.NET 文件扩展名。

首先,您需要编写自定义VirtualFileVirtualPathProvider. 然后使用HostingEnvironment.RegisterVirtualPathProviderin注册提供程序Global.asax

这是从程序集资源中获取文件内容(不存在)的一个很好的实现:http: //www.codeproject.com/Articles/16803/Embedded-UserControls-Revisited

于 2013-11-08T15:17:15.993 回答