Подтвердить что ты не робот

Связанная ссылка css получает ошибку 404

Я пытаюсь получить связывание для работы в ASP.NET MVC 4. Я получаю ошибку 404 из ссылки, сгенерированной для связанного CSS. Я сделал следующее:

  • Установлен пакет "Microsoft ASP.NET Web Optimization Framework" через NuGet (v4.0.20710.0)

  • Создал класс BundleConfig в каталоге App_Start со следующим содержимым:

    using System.Web.Optimization;
    namespace BsdAppTemplate.Web_Nancy.App_Start
    {
        public class BundleConfig
        {
            public static void RegisterBundles(BundleCollection bundles)
            {
                bundles.Add(new StyleBundle("~/bundles/styles/cvi").Include(
                    "~/mainstyles.css"
                ));
            }
        }
    }
    
  • В файл Web.config добавлено следующее:

    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    
        <pages>
          <namespaces>
            <add namespace="System.Web.Optimization"/>
            ...
          </namespaces>
        </pages>
    </system.web>
    
  • Добавлен следующий элемент заголовка моего файла макета MVC:

     @Styles.Render("~/bundles/styles/cvi")
    
  • Скопировал файл CSS, указанный в BundleConfig ( "mainstyles.css" ) в корневой каталог моего веб-проекта.

Когда я просматриваю исходный файл рендеринга, я вижу, что ссылка отображается как:

<link href="/bundles/styles/cvi" rel="stylesheet"/>

Эта ссылка приводит к просмотру 404 при просмотре или просмотру запроса страницы на вкладке сети Chrome.

Я также пробовал эквивалент в веб-форме, но получаю тот же результат (404) из ссылки, сгенерированной при добавлении:

<%: Styles.Render("~/bundles/styles/cvi") %>
4b9b3361

Ответ 1

Кажется, что вы пропустили шаг, в котором вы применяете свою конфигурацию, вызывая RegisterBundles в Application_Start:

protected void Application_Start()
{
    ...
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    ...
}

Обычно в тех случаях, когда класс BundleConfig уже существует (либо как часть шаблона проекта, либо создается пакетом NuGet во время установки), этот вызов уже присутствует, поэтому многие учебники неявно описывают это.

Вы также должны знать, что класс BundleConfig существует для разделения проблем и для сохранения Application_Start чистым. В простых случаях ничто не мешает вам регистрировать пакеты непосредственно в Application_Start:

protected void Application_Start()
{
    ...
    BundleTable.Bundles.Add(new StyleBundle("~/bundles/styles/cvi").Include("~/mainstyles.css"));

    ...
}

Ответ 2

Нашел этот вопрос с помощью google-результатов, но проблема в моем случае была Windows 2008, которая нужна в web.config для работы при компиляции debug = false.

<system.webServer>
  <modules>
    <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
  </modules>
</system.webServer>

Он отлично работал на машине Win7 dev без этого.

Ответ 3

У меня была та же проблема, что мой пакет script неожиданно ответил 404. Я решение похоже на @fiat ответ, который я нашел на этом blogpost.

Решение заключалось в том, чтобы удалить и добавить BundleModule в разделе части модулей раздела system.webServer.

<modules runAllManagedModulesForAllRequests="true">
    <remove name="BundleModule" />
    <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

Ответ 4

У меня была такая же проблема (в веб-форме ASP.Net), я решил проблему с Ignore "bundles/" route в Global.asax:

routeCollection.Ignore("bundles/{*catch}");