Страница ASPX рендеринга во времени выполнения от базы данных

@Ed, Вы могли бы думать о чем-то как catch(...), который ловит неуказанное исключение в C++.

, Но finally код, который будет выполнен, неважно, что происходит в эти catch блоки.

Microsoft имеет страницу справки на попытка наконец C#

7
задан Dmytrii Nagirniak 23 November 2009 в 05:41
поделиться

2 ответа

Путь, по которому вы пытаетесь пойти, по сути загружает файлы ASPX из какого-то другого механизма хранения, кроме файловой системы веб-сервера . Вы начали реализовывать часть этого, но на самом деле вам даже не нужен специальный HttpHandler для этого - ASP.NET имеет существующий механизм для указания других источников фактической разметки ASPX.

Он называется ] VirtualPathProvider , и это позволяет вам поменять функциональность по умолчанию для загрузки файлов с диска, скажем, загрузив их с SQL Server или где-нибудь еще. Затем вы можете воспользоваться всеми преимуществами встроенной компиляции и кэширования, которые ASP.NET использует самостоятельно.

Ядро функциональности входит в метод GetFile и VirtualFile's 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, поддерживающий VPP при среднем уровне доверия.

s 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, поддерживающий VPP при среднем уровне доверия.

s 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, поддерживающий VPP при среднем уровне доверия.

9
ответ дан 7 December 2019 в 01:22
поделиться

Один из способов сделать это - создать подкласс VirtualPathProvider и установить его как HostingEnvironment.VirtualPathProvider, вызвав HostingEnvironment.RegisterVirtualPathProvider . Вам придется переопределить несколько методов. Самый важный из них - GetFile (). Система сборки позаботится о кешировании.

1
ответ дан 7 December 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: