gpt4 book ai didi

c# - HTTPModule 处理页面内容

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:01 24 4
gpt4 key购买 nike

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

IHttpModule 中,我能够捕获 URL,并且可以将其重写为物理文件。

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

问:有什么方法可以在 MasterpageContentPlaceHolder 中呈现我的 CMS 页面组件?没有物理文件?

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

最佳答案

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

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

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

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

关于c# - HTTPModule 处理页面内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com