MVC 3 не будет обслуживать файлы содержимого из подпапки Areas - PullRequest
9 голосов
/ 21 сентября 2011

У меня есть приложение MVC3 с несколькими областями и переносной областью (с использованием MVCContrib)

Обычно я храню все свои файлы содержимого в ~ / Content и мои сценарии в ~ / Scripts.

Однако я создаю довольно сложный веб-клиент для другого сервиса на моем сайте, и я хочу организовать эти файлы JavaScript и изображения (много файлов изображений и ресурсов) в структуре папок Area, которая выглядит примерно так:в ~ / Areas / WebClient

  • Содержимое
    • css
    • шрифты
    • изображения
    • js
  • Контроллеры
  • Модели
  • Представления

У меня есть контроллер агрегатора ресурсов (одна из моих переносных областей), который может подключаться кПапки CSS / JS просто отлично, чтобы обеспечить этот контент.Однако файлы CSS ссылаются на папки images / fonts напрямую, и все эти ссылки оказываются неработающими.Я дважды и трижды проверил пути и убедился, что все правильно, но все равно получаю 404 ошибки.

Насколько я знаю, MVC3 должен игнорировать маршрутизацию, пока там есть статический файл.Также, насколько я знаю, только папки App_ * пользуются особой защитой.Что мне не хватает?Я бы предпочел не смешивать свои изображения и ресурсы с моим основным приложением, если вообще смогу его избежать.

Например: http://localhost/Areas/WebClient/Content/images/knownimage.png не будет работать, а будет, как есть!

1 Ответ

17 голосов
/ 22 сентября 2011

Итак, после некоторого сна и, что более важно, отступив от проблемы, я вспомнил, что MVC фактически предлагает вам защиту от людей, загружающих представления напрямую, что заставило меня вспомнить файл Web.config, необходимый в папке Areas.Конечно же, есть httphandler, который в основном отправляет все запросы обработчику FileNotFound.

Все, что мне нужно было сделать, это перетащить файл web.config в папку содержимого, которую я хотел открыть с помощью следующего:

<?xml version="1.0" encoding="utf-8"?>
<configuration>  
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="BlockViewHandler" />     
    </handlers>
  </system.webServer>
</configuration>

Проблема решена.

...