Я перевожу веб-сайт IIS6 на IIS7 и сталкиваюсь с известной проблемой смешивания глобального обработчика ASP.NET при использовании документов по умолчанию. Подробности смотрите здесь:
http://blogs.msdn.com/b/david.wang/archive/2005/10/15/why-wildcard-application-mapping-can-disable-default-document-resolution.aspx
Прямо сейчас, в IIS7, у меня настроены следующие модули, где "Everything" имеет global.asax, переписывающий множество запросов.
[... All default app modules ...]
<add name="StaticFile" path="*.*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" requireAccess="Read" allowPathInfo="false" preCondition="" />
<add name="Everything" path="*" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" />
В этой конфигурации документы по умолчанию не работают из-за подстановочного знака «StaticFile». Мой набор ограничений примерно такой:
- Все нестатические запросы обрабатываются global.asax "Everything" для перезаписи.
- Не изменяйте код global.asax, потому что он сложный (мы приведем его в порядок позже).
- Наличие документов по умолчанию для существующих каталогов
- Не обрабатывать статические файлы в «Все»
- Использовать интегрированный режим IIS7
В настоящее время я понимаю, что это невозможно сделать с помощью этой настройки. Таким образом, одной из торговых операций будет перемещение кода перезаписи global.asax в модуле IHttpModule, зарегистрированном после статических файлов. Что печально, так это то, что требуется отдельная сборка, а не редактирование проекта напрямую. И я не знаю, как он будет вести себя с Кассини.
Что ты думаешь? Является ли IHttpModule правильным подходом? Может ли быть проще?