捆绑的css链接收到404错误

rog*_*ito 22 c# asp.net asp.net-mvc bundle asp.net-mvc-4

我正在尝试捆绑在ASP.NET MVC 4中工作.我从为捆绑的CSS生成的链接中收到404错误.我做了以下事情:

  1. 通过NuGet安装"Microsoft ASP.NET Web Optimization Framework"软件包(v4.0.20710.0)

  2. 在App_Start目录中创建了一个BundleConfig类,其中包含以下内容:

    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"
                ));
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在站点根目录的Web.config中添加了以下内容:

    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    
        <pages>
          <namespaces>
            <add namespace="System.Web.Optimization"/>
            ...
          </namespaces>
        </pages>
    </system.web>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将以下内容添加到我的MVC布局文件的head元素中:

     @Styles.Render("~/bundles/styles/cvi")
    
    Run Code Online (Sandbox Code Playgroud)
  5. 将BundleConfig("mainstyles.css")中引用的CSS文件复制到我的Web项目的根目录中.

当我查看渲染文件的来源时,我可以看到链接显示为:

<link href="/bundles/styles/cvi" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)

此链接在浏览时会生成404,或在Chrome的网络标签中查看页面请求.

我也尝试过Web表单上的等价物,但是从添加时生成的链接中得到了相同的结果(404):

<%: Styles.Render("~/bundles/styles/cvi") %>
Run Code Online (Sandbox Code Playgroud)

fia*_*iat 60

通过谷歌搜索结果找到了这个问题,但我的案例中的问题是Windows 2008 web.config在编译debug = false时需要这个.

<system.webServer>
  <modules>
    <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
  </modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

没有这个,它在Win7开发机上运行良好.

  • 是!这就是为我解决的问题.谢谢! (6认同)
  • 我新创建的vs 2015 web api项目中缺少此条目.好像是一个bug (2认同)

tpe*_*zek 26

您似乎错过了通过调用RegisterBundles来应用配置的步骤Application_Start:

protected void Application_Start()
{
    ...
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    ...
}
Run Code Online (Sandbox Code Playgroud)

通常在BundleConfig类已经存在的情况下(作为项目模板的一部分或在安装期间由NuGet包创建),此调用也已存在 - 这就是许多教程隐含的原因.

您还应该知道,该BundleConfig课程是为了分离关注点和保持Application_Start清洁.在简单的情况下,没有什么可以阻止您直接注册包Application_Start:

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

    ...
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*ver 13

我有同样的问题,我的脚本包突然响应404.我的解决方案类似于@fiat回答,我在这个博文上发现.

解决方案是删除并添加该BundleModule部分的模块部分system.webServer部分.

<modules runAllManagedModulesForAllRequests="true">
    <remove name="BundleModule" />
    <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>
Run Code Online (Sandbox Code Playgroud)


moh*_*deh 5

我遇到了同样的问题(在ASP.Net Webform中),我通过忽略Global.asax中的“捆绑/”路由解决了我的问题:

routeCollection.Ignore("bundles/{*catch}");
Run Code Online (Sandbox Code Playgroud)