C# 绑定的css链接出现404错误
我正在尝试使用ASP.NETMVC4进行捆绑。我从为捆绑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
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"
));
}
}
}
<system.web>
<compilation debug="false" targetFramework="4.5" />
<pages>
<namespaces>
<add namespace="System.Web.Optimization"/>
...
</namespaces>
</pages>
</system.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可以正常工作,但一旦发布到我的登台服务器,这个模块是必需的。这让我好几天都挠头。加上这个也解决了我的问题。谢谢你,莫森。