C# 绑定的css链接出现404错误

C# 绑定的css链接出现404错误,c#,asp.net,asp.net-mvc,asp.net-mvc-4,bundle,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Bundle,我正在尝试使用ASP.NETMVC4进行捆绑。我从为捆绑CSS生成的链接中得到一个404错误。我已经做了以下工作: 通过NuGet(v4.0.20710.0)安装了“Microsoft ASP.NET Web优化框架”软件包 在App_Start dir中创建了具有以下内容的BundleConfig类: using System.Web.Optimization; namespace BsdAppTemplate.Web_Nancy.App_Start { public class Bu

我正在尝试使用ASP.NETMVC4进行捆绑。我从为捆绑CSS生成的链接中得到一个404错误。我已经做了以下工作:

  • 通过NuGet(v4.0.20710.0)安装了“Microsoft ASP.NET Web优化框架”软件包

  • 在App_Start dir中创建了具有以下内容的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"
                ));
            }
        }
    }
    
  • 已将以下内容添加到网站根目录下的Web.config:

    <system.web>
        <compilation debug="false" targetFramework="4.5" />
    
        <pages>
          <namespaces>
            <add namespace="System.Web.Optimization"/>
            ...
          </namespaces>
        </pages>
    </system.web>
    
  • 将BundleConfig(“mainstyles.CSS”)中引用的CSS文件复制到我的web项目的根目录中

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

    <link href="/bundles/styles/cvi" rel="stylesheet"/>
    
    
    
    当浏览到该链接或在Chrome的网络选项卡中查看页面请求时,该链接会导致404

    我也在web表单上尝试了相同的方法,但我从添加以下内容时生成的链接中得到了相同的结果(404):

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

    您似乎错过了通过调用
    Application\u Start
    中的
    RegisterBundles
    应用配置的步骤:

    protected void Application_Start()
    {
        ...
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        ...
    }
    
    protected void Application_Start()
    {
        ...
        BundleTable.Bundles.Add(new StyleBundle("~/bundles/styles/cvi").Include("~/mainstyles.css"));
    
        ...
    }
    
    通常在
    BundleConfig
    类已经存在的情况下(作为项目模板的一部分或在安装过程中由NuGet软件包创建),此调用也已经存在-这就是为什么许多教程都隐含了它

    您还应该知道,
    BundleConfig
    类用于分离关注点,并保持
    应用程序的启动
    干净。在简单的情况下,没有什么可以阻止您直接在
    应用程序\u Start
    中注册捆绑包:

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

    通过谷歌搜索结果发现了这个问题,但我的问题是Windows 2008在编译调试=false时需要在
    web.config
    中使用它

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

    如果没有这个,它在Win7开发机器上运行得很好。

    我遇到了同样的问题,我的脚本包突然以404响应。我找到了一个类似于我在上找到的@fiat答案的解决方案

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

    <modules runAllManagedModulesForAllRequests="true">
        <remove name="BundleModule" />
        <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
    </modules>
    
    
    
    我也遇到了同样的问题(在ASP.Net webform中),我使用Global.asax中的忽略“bundles/”路由解决了问题:

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

    在我的WebAPI中找不到以“~/bundles/…”开头的所有捆绑包名称。 将该行添加到我的RouteConfig.cs类

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

    修复了我的问题。

    如果您在使用Umbraco时出现此错误,请不要忘记将此行添加到您的web.config:

    <add key="Umbraco.Core.ReservedUrls" value="~/bundles/" />
    

    我想我会告诉大家发生了什么,在我的机器上工作时,我使用“debug=false”运行,所以每个单独的文件都被加载了,但当推到stage/prod时,我从
    /bundles/styles
    中得到了404个

    事实证明,我有一个重写规则,强制一个尾随斜杠,以便请求


    /bundle/styles
    已重定向到不存在的
    /bundle/styles/
    。为重写添加了一个例外,现在一切正常。

    从您的描述来看,您似乎已经“手动”创建了
    BundleConfig
    类“您确定在您的
    应用程序\u Start
    方法中调用了适当的
    RegisterBundles
    方法吗?@tpeczek-谢谢,这正是我所缺少的。如果您想将此重新输入为答案而不是评论,我会将其标记为答案。另外,除了手动设置,还有其他方法吗?我一直在关注这个博客:这很有意义-我是从一个空的MVC 4项目开始的,因此可能不包括BundleConfig启动程序代码。我在访问字体很棒的字体时遇到了同样的问题,对于其他解决方案,请尝试这些关于
    StyleBundle
    virtualpath:,,的链接,希望这对其他人有所帮助。谢谢,这正是拯救我一天的解决方案!对这就是为我修好的。谢谢我新创建的vs 2015 web api项目中缺少此条目。看起来像是一个bug奇怪的是,在我的开发机器上,debug=false可以正常工作,但一旦发布到我的登台服务器,这个模块是必需的。这让我好几天都挠头。加上这个也解决了我的问题。谢谢你,莫森。