Проблема с использованием пользовательского HttpHandler для обработки запросов как для .aspx, так и для страниц без расширений в IIS7 - PullRequest
1 голос
/ 17 декабря 2009

Я пытаюсь обрабатывать как ".aspx", так и запросы страниц без расширений (т.е. как contact.aspx и / contact /), используя собственный HttpHandler в IIS7. Мой обработчик прекрасно работает как в одном, так и в другом случае, но как только я пытаюсь обработать оба случая, он работает только для одного. Пожалуйста, посмотрите фрагмент обработчиков из моего web.config ниже:

Если я продолжаю отображать только «* .aspx», то все запросы .aspx обрабатываются корректно, но, очевидно, запросы без расширения не будут работать:

<add name="AllPages.ASPX" path="*.aspx" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />

Если я изменил сопоставление на «*», тогда все запросы без расширения обрабатываются корректно, но запросы «.aspx», которые все еще должны обрабатываться этим обработчиком, перестают работать. Обратите внимание, что я добавил запись StaticFiles для обработки файлов на диске, таких как images, css, js и т. Д.

<add name="WebResource" path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" />
<add name="StaticFiles" verb="GET,HEAD" path="*.*" type="System.Web.StaticFileHandler" resourceType="File" />
<add name="AllPages" path="*" verb="*" type="Test.PageHandlerFactory, Test" preCondition="" />

Сумасшедшая вещь в том, что когда я загружаю запрос ".aspx" (с показанной 2-й конфигурацией), IIS7 выдает ошибку 404 not found. Ошибка также говорит о том, что запрос обрабатывается обработчиком StaticFiles. Но я обязательно добавил resourceType = "File" в StaticFileHandler, чтобы избежать этого. По словам MS, это означает, что запрос только для «физических файлов на диске». Я неправильно читаю / интерпретирую часть "на диске"?

Мой файл .aspx отсутствует на диске, поэтому я в первую очередь хочу использовать обработчик.

1 Ответ

2 голосов
/ 24 марта 2010

2-ая конфигурация приведет к тому, что * .aspx будет обработан StaticFileHandler, потому что файлы существуют и соответствуют критериям для обработчика. Однако обработчик настроен не обслуживать эти файлы и вместо этого выдает сообщение 404.

Лучшим решением было бы использование реализации HttpModule, такой как Модуль перезаписи URL , для перезаписи виртуальных путей к страницам или обработчикам.

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