【问题标题】:ASP.NET MVC 4 Bundles giving 404 errorASP.NET MVC 4 Bundles 给出 404 错误
【发布时间】:2014-06-04 21:57:29
【问题描述】:

我想将 Bundle 添加到现有的 ASP.NET MVC 4 (.NET 4.5) 网站中,该网站使用:

我尝试遵循这些指示:https://gist.github.com/jkarsrud/5143239,并且在我开始使用捆绑路径之前,CSS 加载良好。

在页面加载时,它会插入样式参考:

<link href="/bundles/marketingcss" rel="stylesheet">

但是发生了 404 错误:

> GET http://localhost:20459/bundles/marketingcss 404 (Not Found) 

这是我的代码:

Web.Config

<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/bundles" />

Global.asax

<%@ Application Codebehind="Global.asax.cs" Inherits="MapCom.Global" Language="C#" %>

Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;
using System.Web.Security;
using System.Web.SessionState;
using Umbraco.Web;

namespace MapCom
{
    public class Global : UmbracoApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            base.OnApplicationStarted(sender, e);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

_Layout.cshtml

@Styles.Render("~/bundles/marketingcss");

BundleConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;

namespace MapCom
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            BundleTable.EnableOptimizations = true;
            ///
            ///Marketing Site CSS Bundle
            ///
            bundles.Add(new StyleBundle("~/bundles/marketingcss")
                .Include("~/plugins/bootstrap/css/bootstrap.min.css")
                .Include("~/css/font-awesome.min.css")
                .Include("~/plugins/parallax-slider/css/parallax-slider.css")
                .Include("~/css/combinedStyles.min.css")
                .Include("~/plugins/ladda-buttons/css/ladda.min.css")
                .Include("~/plugins/ladda-buttons/css/custom-lada-btn.css"));
        }
    }
}

有什么想法吗?

【问题讨论】:

  • 不确定它是否仍然适用,但如果您在文件名中包含带有“.min”的文件,那么至少使用捆绑根本不起作用。输出似乎表明 Styles.Render 认为您指向的是实际文件而不是包 - 因为否则,当 EnableOptimizations 开启时,它将包含版本查询参数 - 即 /bundles/marketingcss?v=...
  • @JimmiTh 在我启动它之后确实有助于修复捆绑包中明显的一些错误。谢谢!

标签: asp.net asp.net-mvc-4 bundling-and-minification umbraco6 system.web.optimization


【解决方案1】:

在深入研究 Umbraco 之后,我注意到我正在进行的项目正在使用一个类:

 public class ApplicationEventHandler : IApplicationEventHandler

这里有更详细的解释:http://our.umbraco.org/documentation/Reference/Events/application-startup

但要点是:

为了绑定到 Umbraco 应用程序中的某些事件,您需要在应用程序启动期间进行这些注册。根据您使用的 Umbraco 版本,有多种方法可以连接到应用程序启动。您使用的版本越高,它就越健壮。

所以 Umbraco 覆盖了一些 ASP.NET 启动方法。

我通过在 ApplicationEventHandler.cs 中添加对 System.Web.Optimization 的引用解决了我的问题,并将我的捆绑注册移至该类中的此方法:

public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

【讨论】:

  • Umbraco 覆盖了许多 ASP.NET 功能,例如:成员资格 (UmbracoMembershipProvider)、当前线程:our.umbraco.org/forum/developers/api-questions/… 等等。从现在开始想想这个“问题”
  • 在我更新了 web.config 后,无论是拨打 OnApplicationStarting 还是 OnApplicationStarted 都可以为我工作(请参阅我的回答)
  • 我在访问 font awesome 字体时遇到了同样的问题,对于 其他解决方案,请尝试这些处理 StyleBundle 的链接 virtualpathLink 1Link 2Link 3Link 4,希望这对某人有所帮助。
【解决方案2】:

ONLY 在这里对我有用的事情是将捆绑包的路径添加到web.config 中的以下设置中

我的捆绑代码

BundleTable.Bundles.Add(new ScriptBundle("~/opt/jscripts").Include(
                "~/Scripts/twitterFetcher.js"
                ));
            BundleTable.EnableOptimizations = true;

Umbraco 默认设置

<add key="umbracoReservedPaths" value="~/umbraco,~/install/" />

新设置

<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/opt/" />

【讨论】:

  • 对——你肯定需要添加保留路径,否则 Umbraco 路由会尝试处理它,而不是让 .NET 处理它。
【解决方案3】:

尝试以下建议:

1.不要将关键字 bundles 用于您的 css 虚拟路径,只需将其更改为其他内容,并使用关键字 bundles仅限您的脚本。 像这样:

 bundles.Add(new StyleBundle("~/Content/marketingcss")

记住您需要确保如果您在内容文件夹下有一个名为 marketingcss 的文件,您应该将虚拟路径更改为其他内容,因此虚拟路径不应与物理路径重复)

2.在您的 _Layout.cshtml 中使用以下行代替您的:

 @Styles.Render(BundleTable.Bundles.ResolveBundleUrl("~/Content/marketingcss"))

3.如果上述建议不起作用,请在您的 _Layout.cshtml 中尝试以下建议:

<link href="@System.Web.Optimization.BundleTable.
               Bundles.ResolveBundleUrl("~/Content/marketingcss")"
               rel="stylesheet"
               type="text/css" /> 

更新

4.刚刚看到我们的一位朋友关于不要将 .min 文件放入包中的评论,这是正确的,因此您不能在 budleConfig 类中包含 .min 文件,而只需使用普通文件,如 bootstarp.cssbootstrap.min.css 并为所有其他文件做同样的事情,当然首先要确保你有正常的文件,所以不仅仅是更改名称。

我希望它有助于修复您的代码

【讨论】:

  • 不幸的是,这些项目都没有帮助 - 确定这是导致问题的 Umbraco 技术问题。
  • @cvocvo 你能否详细说明一下 Umbraco 的技术性,我想我和你有同样的问题
猜你喜欢
  • 2016-08-30
  • 2013-03-16
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多