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

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

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

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

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>
Другие вопросы по тегам