web-dev-qa-db-ja.com

バンドルされたCSSリンクで404エラーが発生する

ASP.NET MVC 4でバンドルを機能させようとしています。バンドルされているCSSに対して生成されたリンクから404エラーが発生します。私は次のことを行いました:

  1. NuGet(v4.0.20710.0)を介して「Microsoft ASP.NET Web最適化フレームワーク」パッケージをインストール

  2. 次の内容の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"
                ));
            }
        }
    }
    
  3. サイトルートのWeb.configに以下を追加しました。

    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    
        <pages>
          <namespaces>
            <add namespace="System.Web.Optimization"/>
            ...
          </namespaces>
        </pages>
    </system.web>
    
  4. MVCレイアウトファイルのヘッド要素に以下を追加しました。

     @Styles.Render("~/bundles/styles/cvi")
    
  5. BundleConfigで参照されているCSSファイル( "mainstyles.css")をWebプロジェクトのルートディレクトリにコピーしました。

レンダリングされたファイルのソースを表示すると、リンクが次のように表示されていることがわかります。

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

このリンクを参照するか、Chromeのネットワークタブでページリクエストを表示すると、404になります。

私もWebフォームで同等のものを試しましたが、追加したときに生成されたリンクから同じ結果(404)が得られます。

<%: Styles.Render("~/bundles/styles/cvi") %>
22
rogersillito

Application_StartRegisterBundlesを呼び出して設定を適用するステップを逃したようです:

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"));

    ...
}
26
tpeczek

グーグルの結果を介してこの質問を見つけましたが、私の場合の問題はWindows 2008がweb.configコンパイル時にdebug = falseで動作します。

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

これがなくてもWin7開発マシンで問題なく動作しました。

60
fiat

私のスクリプトバンドルが突然404で応答したのと同じ問題がありました。私は this blogpost で見つけた@fiatの回答に似たソリューションです。

解決策は、system.webServerセクションのmodulesパーツセクションにあるBundleModuleを削除して追加することでした。

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

同じ問題が(ASP.Net Webフォームで)発生しました。Global.asaxの "bundles /"ルートを無視する問題を解決しました。

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

「〜/ bundles/...」で始まるすべてのバンドル名がWebAPIで見つかりませんでした。 RouteConfig.csクラスに行を追加する

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

私の問題を修正しました。

0
Florian SANTI