Проблема с использованием пользовательского HttpHandler для обработки запросов как для страниц .aspx, так и для страниц без расширения в IIS7

StackOverflow https://stackoverflow.com/questions/1919225

Вопрос

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

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

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

Если я изменю сопоставление на "*", то все запросы без расширения будут обработаны правильно, но запросы ".aspx", которые все еще должны обрабатываться этим обработчиком, перестанут работать.Обратите внимание, что я добавил запись StaticFiles для обработки файлов, находящихся на диске, таких как изображения, 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-файла нет на диске, вот почему я хочу использовать обработчик в первую очередь.

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top