2013-08-13 5 views
2

Я пытаюсь создать виртуальный файл. Например, у меня есть компонент, который получает CMS-страницу из БД с заданным ID. Теперь у меня есть url как /hello/world/, и я хочу разобрать страницу /hello/world/ в мой ContentPlaceHolder в MasterPage.HTTPModule обрабатывает содержимое страницы

В IHttpModule Я могу уловить URL-адрес, и я могу переписать его в физический файл.

Это был только шаг 1, теперь мне нужно загрузить виртуальную страницу, которая не существует. Поэтому я не думаю, что могу использовать app.Context.RewritePath(), потому что для этого нужен файловый файл на сервере.

В: Есть ли способ сделать мой компонент страницы CMS в ContentPlaceHolder в Masterpage? Без файлового файла?

У меня есть идея объединить IHttpModule и переписать файл в расширение .cmspage, а затем с помощью IHttpHandler, чтобы поймать это расширение файла и загрузить мой компонент, но похоже, что это не сделано?

ответ

0

Когда вы вызываете страницу ASP.NET, IIS использует по умолчанию VirtualFileProvider для загрузки файла из IO, и если файл не находится в пути, исключение будет поднято. Хорошая новость заключается в том, что вы можете реализовать своего настраиваемого поставщика и добавить поставщика. Таким образом, если файл не существует в IO, вы можете загрузить свой собственный контент из любой точки (загрузка из БД, других файлов, ...).

Вы можете использовать его для загрузки виртуальных ascx, aspx и всех расширений файла ASP.NET.

Прежде всего, вам необходимо написать свой заказ VirtualFile и VirtualPathProvider. Затем зарегистрируйте поставщика, используя HostingEnvironment.RegisterVirtualPathProvider в Global.asax.

Вот хорошая реализация для получения содержимого файла (который не существует) из ресурсов Ассамблеи: http://www.codeproject.com/Articles/16803/Embedded-UserControls-Revisited

 Смежные вопросы

  • Нет связанных вопросов^_^