Я развернул приложение ASP.NET 3.5 на 64-битном сервере Windows 2003 R2.
В web.config у меня есть следующее
<customErrors mode="RemoteOnly"
defaultRedirect="/404/">
<error statusCode="404"
redirect="/404/"/>
<error statusCode="500"
redirect="/500/"/>
</customErrors>
В свойствах веб-сайта в диспетчере IIS я установил для ошибок 404 и 500 значение Type = "URL" и те же URL-адреса, что и в web.config.
У меня есть карта приложения с подстановочными знаками для .NET 2.0 aspnet_isapi.dll с отключенным параметром «Проверять наличие файла».
Если я пытаюсь попасть в поддельный файл .aspx, я успешно попадаю на страницу 404. Я полагаю, это потому, что существует явное сопоставление .aspx с .NET DLL.
Если я пытаюсь получить доступ к поддельному каталогу, я просто получаю простой текстовый ответ:
Система не может найти указанный файл.
Похоже, что эти запросы на каталоги не маршрутизируются через конвейер .NET, чего я ожидал (и в этом нуждался) из-за сопоставления приложений с подстановочными знаками.
Любые идеи?
Для IIS 5.0 удачный путь:
Свойства> Домашний каталог> Расширенная конфигурация: выберите интересующее вас расширение файла и установите флажок «Проверить наличие файла».
Чтобы проверить вашу логику, я фактически прошел весь процесс. Я использовал трассировку ETW для IIS и ASP.NET и Process Monitor, чтобы увидеть, что происходит. Вот что я нашел:
IISGeneral: GENERAL_STATIC_FILE_HANDLER
и терпит неудачу с 0x80070002
то есть FILENOTFOUND0x80070002
и отправляет общий The system cannot find the file specified.
ошибка.
Надеюсь это поможет.
Если у вас есть сопоставление с подстановочными знаками без включенного параметра «Проверить, существует ли файл», он отправит запрос в вашу DLL. Если DLL ASP.Net 2.0, к которой вы ее сопоставили, НЕ использует web.config для вашего приложения (вы упомянули, что это было для .Net 3.5), тогда она вернет общую ошибку. Если вы включите опцию «Проверить, существует ли файл», IIS увидит, что папки нет, и вместо этого будет использовать свои внутренние настройки ошибок (которые, как вы сказали, такие же, как и в web.config). Возможно, попробуйте включить эту опцию, чтобы узнать, поможет ли в вашей ситуации.