Управление HTTP-ответом - PullRequest
4 голосов
/ 06 января 2011

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

Мы хотим сделать это путем переписывания HTML в веб-формах ASP.NET. Мой вопрос: какая стратегия является лучшей в соответствии с параметрами осуществимость , влияние на производительность и усилия по внедрению в унаследованных приложениях .

Что я должен сделать

предназначен для получения HTML-вывода веб-формы, его синтаксического анализа и замены определенных URL-адресов в соответствии с определенными пользователем правилами. В этом примере я бы переписал весь статический контент в URL CDN, но его можно легко распространить на методы перезаписи URL. Я нашел лотов (и я действительно имею в виду лотов ) статей о перезаписи URL с точки зрения того, что URL-адреса, подобные http://myblog.com/2092, интерпретируются как http://myblog.com/Default.aspx?post=2092, но я не нашел ни одного, показывающего мне, как разумно форматирует URL-адреса старого стиля в более короткий формат прямо из HTML-кода (чтобы страница отображала краткий URL-адрес напрямую) [править] без глубокого вмешательства в код.

Стратегия 1

Как предложено в ответе на вышеупомянутый вопрос, напишите модуль HTTP, который перехватывает HTML и переписывает его. На самом деле, я оглянулся и увидел, что могу установить потоковый объект Response.Filter, который выполняет фильтрацию HTML.

  • Плюсы: я могу внедрить модуль HTTP в унаследованное приложение, настроить правила перезаписи через XML и заставить самое старое приложение CRM / электронной коммерции загружать статический контент из CDN, не касаясь его кода вообще .
  • Минусы: я подозревал, что (и комментарий здесь подтверждает моих подозреваемых) необходимость переопределить метод Stream Write, который в общем случае работает с частичным буфером, может привести к в плохих заменах. Предположим, что метод Write сначала вызывается с чанком, подобным ttp://mydomain.com/static/ima (где, как я полагаю, <img src="h уже был написан ранее), а затем ge.png" /> (так что предположите окончательный URL-адрес :-P) с правилом перезаписи, в котором регулярное выражение http://mydomain.com/static/[^"]* в http://cdn.com/path/$1, замена не сделана. Чтобы обойти это, я мог бы использовать MemoryStream или что-то подобное для буферизировать полный набор данных и затем выполнять замены, но это может вызвать проблемы на высоконагруженных серверах

Стратегия 2

Переопределение Page Render метода таким образом, как описано здесь

  • Плюсы: не испытывает проблемы с разбивкой
  • Минусы: требует определения базового класса для всех страниц. Реализуется в новых приложениях, не уверен в поддержке устаревших приложений. Кажется, есть проблема, поскольку вы не можете создать экземпляр HttpTextWriter напрямую

Очевидно, что для новых веб-приложений, которые нам предстоит разработать, я бы выбрал стратегию 2, но мне действительно нравится использовать динамические компоненты , так как их можно легко подключить, когда приложение требует их ( поэтому, если наше новое приложение будет установлено без CDN, функция будет отключена).

Вкратце, мои вопросы

Как бы вы исправили минусы обеих стратегий (особенно 1-й)? И, конечно же, у вас есть другие стратегии, чтобы предложить достичь этой цели?

Спасибо.

1 Ответ

4 голосов
/ 06 января 2011

Возможно, вы могли бы использовать функцию адаптивного управления поведением в ASP.NET.См. Архитектурный обзор поведения адаптивного управления

По сути, вы должны переопределить новый класс HtmlTextWriter, связать его в качестве средства рендеринга по умолчанию и переопределить рендеринг тега «A» своим собственным кодом.

...