HTTPModule处理页面内容

时间:2013-08-13 14:17:09

标签: c# .net vb.net httphandler httpmodule

我正在尝试创建一个虚拟文件。例如,我有一个组件从DB获取具有给定ID的CMS页面。现在我有一个类似/hello/world/的网址,我想将网页/hello/world/解析为ContentPlaceHolder中的MasterPage

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

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

问:有没有办法在ContentPlaceHolder的{​​{1}}中呈现我的CMS页面组件?没有一个fysical文件?

我确实想知道如何组合IHttpModule并将文件重写为Masterpage扩展名,然后使用.cmspage来捕获该文件扩展名并加载我的组件,但这看起来似乎没有完成?

1 个答案:

答案 0 :(得分:0)

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

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

首先,您需要编写自定义VirtualFileVirtualPathProvider。然后使用HostingEnvironment.RegisterVirtualPathProvider中的Global.asax注册提供商。

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