Как часть CMS, я создал собственный VirtualPathProvider, который предназначен для обслуживания одного файла вместо фактической файловой структуры. Я настроил его так, что если файл действительно существует на сервере, этот файл будет обслуживаться. Если файл не существует, вместо него будет храниться виртуальный контент, сохраненный для этого адреса. Это похоже на концепцию обслуживания веб-сайта из файлов, хранящихся в базе данных, хотя в этом случае контент хранится в XML-файлах на сервере.
Эта настройка отлично работает, когда делается запрос к определенной странице. Например, если я запрашиваю «www.mysite.com/foobar.aspx», будет храниться контент, который хранится для «foobar.aspx». Кроме того, если я запрашиваю "www.mysite.com/subdir/foobar.aspx", будет также предоставлен соответствующий контент.
Проблема заключается в следующем: если я спрашиваю что-то вроде «www.mysite.com/foobar», вещи начинают разваливаться. Если каталог существует на диске (и не имеет настроенной страницы по умолчанию в IIS, такой как index.aspx), я получу сообщение об ошибке «Запрещено перечисление каталога». Если каталог не существует, я просто получу 404 - Ресурс не найден.
Я пробовал несколько вещей, и пока ничего из того, что я делал, не имело никакого значения. Кажется, что IIS просто отмечает отсутствие каталога (или файла по умолчанию в существующем каталоге) и обслуживает свой собственный код ошибки, даже не спрашивая мое приложение, что делать с запросом. Если он когда-нибудь попадет в приложение, я смогу решить проблему, но в настоящий момент я совершенно растерялся. Кто-нибудь знает, есть ли какая-то настройка в IIS, которая вызывает это?
Я искал каждый ресурс, который смог найти по этому предмету, и выхожу пустым. Я знаю, что это должно быть возможно, потому что я прочитал учебники по обслуживанию контента из баз данных и ZIP-файлов. ПОМОГИТЕ!
p.s., Я использую IIS6 и .NET 3.5