呈现ASPX页在运行时从数据库
-
21-09-2019 - |
题
假设的代码如下:
public class DynamicAspxHandler : IHttpHandler {
bool IHttpHandler.IsReusable { get { return false; } }
void IHttpHandler.ProcessRequest(HttpContext httpContext) {
string aspxContent = PlainASPXContent();
Page page = CreatePage(httpContext, aspxContent);
page.ProcessRequest(httpContext);
}
Page CreatePage(HttpContext context, string aspxContent) {
// How to implement this?
}
}
我怎么可以 实现CreatePage 方法的实例页基础上的普通串的内容ASPX?
该注意的是,ASPX串本身可以containt参照已有的集中在磁盘上。
我意识到必须有巨大的性问题与这一点,但在这个阶段我只是想知道我怎么可以这样做。很显然,我将必须缓的结果。
谢谢。
解决方案
路径你想下去基本上是 装载ASPX文件,从其他一些存储机构于文件系统网站服务器.你已经开始实施的一部分,但实际上你甚至不需要一个定义HttpHandler要做到这一-ASP.NET 有一个现有的机制,用于指定的其他来源的实际ASPX标记。
它被称为 VirtualPathProvider, 和它可以让你换了默认的功能,为加载文件的磁盘,说,装载它们从SQL服务器或任何其他地方有意义的。然后你就可以利用的所有内置在汇编和缓存ASP.NET 使用自己。
核心功能进来的 GetFile方法 和 VirtualFile的Open():
public override VirtualFile GetFile(string virtualPath)
{
//lookup ASPX markup
return new MyVirtualFile(aspxMarkup);
}
//...
public class MyVirtualFile : VirtualFile
{
private string markup;
public MyVirtualFile(string markup)
{
this.markup = markup;
}
public override Stream Open()
{
return new StringReader(this.markup);
}
}
请注意,今天,使用一个自定义VirtualPathProvider不需要完全信任。然而,很快ASP.NET 4.0将可用和它支持VPPs下介质的信任。
其他提示
这样的一种方法是通过创建一个亚类的 VirtualPathProvider 并将其设置为HostingEnvironment.VirtualPathProvider通过调用 HostingEnvironment.RegisterVirtualPathProvider.你将要复盖的一些方法。最重要的是GetFile().在建立系统将采取的缓存。
不隶属于 StackOverflow