2010-05-26 3 views
0

Я пытаюсь перехватить веб-запрос asp.net и на основе поиска заменить страницу, которая будет передана клиенту.заменить asp.net Response.Output с моим собственным контентом

пример: Если на мой веб-сервер приходит запрос «/ about-us», я сначала увижу, есть ли у меня версия этого в базе данных, иначе я вернусь к плоским файлам. Версия, которую я извлечу из базы данных, будет представлять собой страницу .aspx, которая должна быть отображена, и содержать веб-элементы управления и встроенный скрипт сервера.

Каков наилучший способ для этого?

Я попытался переопределить метод CreateHtmlTextWriter, но это, кажется, слишком поздно в процессе, когда TextWriter, переданный этому методу, уже создан.

Я также попытался реализовать свой собственный файл PageHandlerFactory, но это похоже на создание экземпляра страницы, из которого я не могу переопределить его внутреннюю настройку потока Response.Output.

Могу ли я лаять на неправильное дерево здесь? Каков наилучший подход?

ответ

3

Внесите свои собственные HttpHandler - это может перехватить вызовы, вы можете выбрать материал из БД или из файловой системы и отправить их в качестве ответа. Вам просто нужно реализовать IHttpHandler в своем классе и настроить IIS для его использования.

Если все, что вам нужно сделать, это вывести текст (в виде страницы ASPX), то он не будет проходить через механизм aspx IIS. Для этого вам придется динамически загружать, компилировать и выполнять такую ​​страницу, что очень сложно сделать. This Статья в Microsoft KB может помочь.

+0

Как я могу сделать рендеринг элементов управления aspx и тегов на стороне сервера? Я сделал этот подход, но в итоге написал исходный код моего .aspx, он не был отображен – WebDude

+0

@WebDude. Если все, что вам нужно сделать, это вывести текст (в виде страницы ASPX), тогда он не будет проходить через IIS aspx engine. Для этого вам придется динамически загружать, компилировать и выполнять такую ​​страницу, что очень сложно сделать. – Oded

+0

иронически точно, что я пытаюсь сделать :( – WebDude

0

Проблема, с которой вы собираетесь столкнуться, состоит в том, что простое получение страницы aspx и ее рендеринг не будут работать должным образом, и вы не сможете динамически загружать страницу ASPX, вы должны использовать Server.Transfer или Response. Перенаправление.

Вы можете сделать это с помощью пользовательских элементов управления и Page.LoadControl, используя поставщик виртуального пути, чтобы получить контроль над базой данных, но я думаю, что это будет сложно и чрезмерно спроектировано.

Если у вас есть время, чтобы изучить его и иметь поддержку фреймворка, я бы определенно посмотрел на использование ASP.Net MVC для этого.

+0

Вы также можете выполнить Response.Redirect для обработчика http, который загружает страницу aspx, которая затем будет отображаться в ASP .Net жизненный цикл правильно, но это не очень хороший способ сделать что-то и будет кошмаром для отладки. IMO. –

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