Проблема с использованием пользовательского модуля HttpModule с включенным ajax (ScriptManager) веб-формы asp.net (ASP.NET 4.0 / IIS 7) - PullRequest
0 голосов
/ 04 марта 2011

У меня есть собственный Http-модуль, который обрабатывает события PostAuthenticateRequest и PreRequestHandlerExecute.

Однако, когда я пытаюсь использовать модуль на странице с ReportViwer (для которого требуется ScriptManager), я получаю кучу ошибок браузера, таких как следующие, и средство просмотра отчетов не работает должным образом, то есть не показывает никакого результата.

  1. Не удалось загрузить клиентский фреймворк ASP.NET Ajax.
  2. 'Sys' не определено
  3. Синтаксическая ошибка (WebResource.axd)
  4. «Тип» не определен (ReportViewerWebControl.axd)

Если я закомментирую модуль из web.config, все будет работать как положено (очевидно, без кода модуля). Может ли кто-нибудь помочь мне понять и решить эту проблему?

Спасибо !!

1 Ответ

2 голосов
/ 08 марта 2011

Я мог бы найти обходной путь, чтобы заставить мой код работать.Однако я не могу объяснить, как обрабатывается веб-страница с поддержкой ajax по умолчанию.

Я хотел бы поблагодарить Тони за его понимание, которое заставило меня задуматься в этом направлении.

Чтобы проверитьПри обработке я запустил модуль со страницей с поддержкой ajax, на которой была панель обновления, на которой отображалось текущее системное время.Панель обновлений обновлялась на основе таймера, который отключался каждые 10 секунд.То, что я заметил, было то, что для каждого запроса было сделано несколько звонков в httpmodule.Первый вызов модуля имеет заголовок, который содержит около 7 пар ключ-значение, таких как Соединение, Авторизация, Хост и т. Д. Последующие вызовы имели некоторую дополнительную пару ключ-значение, среди которых пара привлекла мое внимание.Это x-запрашиваемое с и x-microsoftajax, которое, как я считаю, XHttpRequest ... запрос ajax.

Итак, в моем решении я просто пропустил обработку моего модуля в зависимости от наличия этих значений заголовка, что-то вродеследующее.

 if (HttpContext.Current.Request.Headers["x-microsoftajax"] == null)
 { ... old code ... }

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

...