Столкновение маршрута asp.net MVC с физическим путем в IIS7 - PullRequest
3 голосов
/ 20 мая 2010

Я возиться с организацией контроллера и столкнулся с проблемой.

Если у меня есть следующая физическая структура

/Home/HomeController.cs
/Home/Index.aspx
/Home/About.aspx

и я запрашиваю URI:

/Home/Index

Я получаю 403 Directory Listing Denied: (

(я использую пользовательские IControllerFactory и IViewEngine, чтобы искать этот путь не по умолчанию)

Почему это происходит? (Я знаю, что 403 потому, что он попадает в папку /Home, но почему он попадает в папку?)

Почему модуль UrlRoutingModule не переписывает маршрут и не позволяет контроллеру принять запрос?

Application_BeginRequest срабатывает, но затем кажется, что передает управление обратно IIS, чтобы попытаться обслуживать файловую систему.

Является ли модуль UrlRoutingModule по умолчанию физическим путем, если он существует до перезаписи?

Есть ли способ заставить эту работу?

N.B. Пожалуйста, не предлагайте перемещать мои контроллеры и т. Д. Я знаю, что это очевидный вариант, но это не вопрос;)

Использование IIS7 в интегрированном режиме

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 мая 2010

Поскольку абстракция маршрутизации будет направлять только запрос, который не имеет эквивалентного файла на диске.

У вас нет другого выбора, кроме как переименовать структуру папок.

- Изменить Нет, фактически вы можете отключить эту «функцию», установив свойство RouteExistingFiles в RouteCollection.

1 голос
/ 20 мая 2010

Модуль маршрутизации действительно предпочитает реальные файлы, если они существуют. Похоже, что он также не должен перенаправлять после неудачной проверки доступности.

Вы понимаете, что наличие отдельного контроллера / представлений усиливает разделение интересов, центральных для архитектуры MVC, верно? Я был бы обеспокоен тем, что хранение контроллеров / представлений в одной папке может привести к путанице для будущих разработчиков.

...