Переписать вывод страницы ASP.NET - PullRequest
1 голос
/ 02 апреля 2009

Немного предыстории: я пытаюсь создать легкий пользовательский сеанс без файлов cookie, поддерживаемый базой данных, с использованием сильно урезанной реализации ASP.NET. Эта аудитория сайта будет мобильными пользователями, подключающимися через сотовые сети, поэтому размеры страниц должны быть очень маленькими. Я не использую сеанс .NET, viewstate и т. Д., И большинство страниц содержат очень мало серверных элементов управления, если таковые имеются.

Я хочу иметь возможность обрабатывать выходные данные запроса страницы, чтобы я мог изменять внутренние ссылки в ответе с помощью собственной информации о сеансе. Я прочитал, что существует ISAPI-фильтр, разрешающий сессии без файлов cookie до ASP.NET. Это в основном то, что я хочу построить, просто внутри приложения.

Кто-нибудь делал что-нибудь подобное? Я уже наследую класс System.Web.UI.Page для своей базы страниц по другим причинам. Похоже, что я должен быть в состоянии сделать что-то отсюда.

Спасибо

Ответы [ 2 ]

1 голос
/ 02 апреля 2009

HttpModules может дать вам полный контроль над выходом, но есть также несколько других вещей, которые вы можете сделать, что немного проще.

  1. Создание пользовательского фильтра для Response.Filter. Более или менее вы создаете поток, через который вы проходите все перед тем, как отправить его в базовый поток, позволяя вам вносить в него изменения.

  2. Переопределите событие рендеринга для страницы и запишите все свое содержимое в строку, а затем внесите в нее изменения ... например ...

.

//this is from memory, you might need to check it
override void Render(HtmlTextWriter writer) {

StringWriter html = new StringWriter();
HtmlTextWriter render = new HtmlTextWriter(html);
base.Render(render);
string output = html.ToString()

//make your changes to output
//output = ???

writer.Write(output);

}
1 голос
/ 02 апреля 2009

Изучите использование HttpModule для этого. Вы можете обработать весь ответ на выходе.

Вы также можете сделать что-то с базовым классом - возможно, пройти через все серверные элементы управления, которые могут содержать ссылки на событие PreRenderComplete. Это не поможет вам с тегами HTML <A>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...