假设的代码如下:

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().在建立系统将采取的缓存。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top