2009-04-02 2 views
1

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

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

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

Thanks

ответ

1

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

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

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

.

//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); 

} 
+0

Хорошо, я так понимаю, вы имеете в виду Response.Filter. Кажется, это то, что я искал. Большое спасибо! – Paul

+0

Спасибо, ты прав, я исправлю это – Hugoware

1

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

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

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