Есть ли способ иметь расширение файла в имени пакета?

Я хотел бы определить такой пакет:

bundles.Add(
    new StyleBundle("~/style.css").Include(
        //...
));

Если имя пакета просто "~/style", это работает, но с расширением файла он всегда возвращает 404. Я подозреваю, что сервер ищет файлы CSS и JS на диске и игнорирует систему связывания, но я не могу найти никого другого, кто пытается включить расширения файлов в имена пакетов. Можно ли обойтись без чего-то вроде перезаписи URL?


person sbking    schedule 17.10.2012    source источник


Ответы (1)


Вы можете добавить следующее в свой раздел <system.webServer> в web.config:

<modules runAllManagedModulesForAllRequests="true" />

Это гарантирует, что запросы к статическим ресурсам, таким как .js и .css, будут проходить через управляемые модули и перехватываться ASP.NET MVC.

В качестве альтернативы включению runAllManagedModulesForAllRequests для всех запросов вы можете настроить их только для тех URL-адресов, которые вам нужно использовать. Итак, внутри <handlers> добавьте следующее:

<handlers>
    <!-- ... -->
    <add name="scriptBundle" verb="*" path="script.js" type="System.Web.Optimization.BundleHandler, System.Web.Optimization" preCondition="managedHandler" />
    <add name="cssBundle" verb="*" path="style.css" type="System.Web.Optimization.BundleHandler, System.Web.Optimization" preCondition="managedHandler" />
</handlers>
person Darin Dimitrov    schedule 17.10.2012
comment
Хм, есть ли менее радикальное решение, которое затронет только файлы .js и .css? - person sbking; 17.10.2012
comment
+1, но наличие path="*.bundle.js" предотвратит запуск обработчика для реальных файлов. - person Fabio Milheiro; 28.07.2014
comment
Мне интересно, есть ли у второго решения (добавление отдельных обработчиков) некоторые недостатки. В некоторых случаях это, безусловно, работает, но я также иногда видел ошибку типа Unhandled application error: System.MissingMethodException: Constructor on type 'System.Web.Optimization.BundleHandler' в наших журналах. Конечно, BundleHandler не имеет конструктора без параметров. Как это должно работать (т. е. на какое поведение мы полагаемся?) - person Johannes Rudolph; 15.06.2015
comment
ре. мой предыдущий комментарий, я подтвердил, что исключение возникает для запроса, который указывает на правильный путь пакета, но с неправильным параметром версии пакета (например, /x/bundle.js?v=12345). Я уверен, что это можно исправить (и вернуть правильный 404) с помощью некоторых других уловок.... - person Johannes Rudolph; 15.06.2015