2010-04-21 2 views
6

Если у меня есть запрос на ресурс в моем ASP.NET MVC1 (или 2) веб-приложении для статического ресурса, скажите ... изображение или файл javascript или файл css ... работает ли среда .NET и проверяет, соответствует ли запрос списку маршрутов ... и, в конце концов, не может найти контроллер для этого?ASP.NET MVC маршрутизации и статические данные (т. Е. Изображения, скрипты и т. Д.)

например.

Ресурс: /Content/Images/Foo.png

идти ли этот запрос через мой список маршрутов .. не в состоянии соответствовать всем контроллерам/действий на этот запрос, а затем попытаться этим путем напрямую?

ответ

7

Вы можете выбрать, следует ли сопоставить существующий файл или не установив RouteCollection.RouteExistingFiles Property

Возвращает или задает значение, указывающее, следует ли маршрутизации ASP.NET обрабатывать URL-адреса, которые соответствуют существующий файл.

Вот что я прочитал от here:

Однако система маршрутизации по-прежнему делает проверки файловой системы, чтобы увидеть, если входящий URL происходит в соответствии файл или диск, и если да, то маршрутизация игнорирует запрос (минуя любые записи маршрутов, которые могут также совпадать с URL-адресом), так что файл будет обслуживаться напрямую. Это очень удобно для статических файлов, таких как изображения, CSS и файлы JavaScript. Вы можете сохранить их в своем проекте (например, в папках/Контент или/Сценарий), а затем ссылку и обслуживать их напрямую, точно так же, как если бы вы не использовали маршрутизацию вообще. Так как файл действительно существует на диске, это имеет приоритет над вашей конфигурацией маршрутизации.

Если вы хотите, чтобы ваша конфигурация маршрутизации имела приоритет над файлами на диске, вы можете установить значение свойства RouteExistingFiles RouteCollection в значение true. (По умолчанию это неверно.)

+0

Так что, по вашему мнению, оно сначала пытается найти файл на диске (например, foo.png, something.js, some.ico, что угодно). Если это не удастся сделать это, тогда он ударит по системе маршрутизации. Таким образом, к тому моменту, когда он входит в мой собственный IControllerFactory (например), предполагается, что ресурс физически не существует на диске. И наконец, это для набора настроек по умолчанию (т. Е. RouteExistingFiles = false). –

+0

Да, это правильно –

0

Вы также можете сделать небольшой трюк в IIS. Я храню js, images, css и т. Д. В папке Content под виртуальным каталогом.

Если вы затем просмотрите свойства (в диспетчере IIS) папки «Содержимое», создайте ее как виртуальный каталог, а затем удалите сопоставление подстановочных знаков. Затем установите папку Content обратно в обычный каталог. Затем это должно прекратить запросы к этим файлам, обрабатываемым обработчиком aspnet_isapi.

1

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

Смежные вопросы