【问题标题】:ASP.NET MVC 4.0 Bundles with Multiple Absolute URLs for Styles具有多个样式绝对 URL 的 ASP.NET MVC 4.0 捆绑包
【发布时间】:2013-01-19 18:18:05
【问题描述】:

我的一些应用程序“Styles”和“Scripts”是从不同的环境应用程序中引用的。

  1. 本地站点来自http://localhost:123/mystyles/default.css
  2. 开发站点来自http://mydev.com/mystyles/default.css
  3. 产品网站来自http://prod.com/mystyles/default.css

我尝试在 bundles 上使用 cdn 进行一些调整,如下所示,但没有帮助。

public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Clear();
            bundles.ResetAll();

            BundleTable.EnableOptimizations = false;
            bundles.UseCdn = true;

            if (HttpRuntime.BinDirectory.Contains("local"))
                cdnHost = "http://localhost:123/";
            else if(condition)
                cdnHost = "http://mydev.com/";
            else
                cdnHost = "http://prod.com/";

            bundles.Add(new StyleBundle("~/Content/HRO/jquery/ui/css", cdnHost)
                .Include("~/css/jQuery/hro-0079c1/jquery-ui-1.8.11.custom.css"));

            bundles.Add(new StyleBundle("~/Content/HRO/jquery/ui/css", cdnHost)
               .Include("~/css/jQuery/hro-0079c1/jquery-ui-1.8.11.custom.css"));

            bundles.Add(new StyleBundle("~/Content/HRO/base/css", cdnHost)
               .Include("~/css/base.css"));

            bundles.Add(new StyleBundle("~/Content/HRO/reset/css", cdnHost)
               .Include("~/css/reset.css"));
        }

但这不起作用。当我如下调用这些捆绑包时

    @Styles.Render("~/Content/HRO/jquery/ui/css")
    @Styles.Render("~/Content/HRO/base/css")
    @Styles.Render("~/Content/HRO/reset/css")

我尝试调试 RegisterBundles(),看起来它没有使用 cdn url 创建这些项目。

这是为捆绑包创建绝对 css URL 的正确方法吗? 我在这里错过了什么吗? 有没有更好的方法来调试我的 RegisterBundles()?

【问题讨论】:

  • 你有什么问题?
  • @Dismissile 我更新了我的问题。请看一下。

标签: asp.net-mvc bundle asp.net-optimization


【解决方案1】:

您需要将 EnableOptimizations 和 EnableCDN 都设置为 true 才能使用 cdn url。

【讨论】:

    【解决方案2】:

    例如,试试这样的一些:

    bundles.Add(new StyleBundle("~/Content/HRO/jquery/ui/css","http://mydev.com/css/jQuery/hro-0079c1/jquery-ui-1.8.11.custom.css"));

    我可以的。我可以做的是将多个样式组合在一个包中。

    祝你好运!

    【讨论】:

      【解决方案3】:

      如果只是在捆绑包中获取绝对网址,那么您可以这样做。

      public static class Extensions
          {
              public static IHtmlString RenderScript(this UrlHelper helper, params string[] paths)
              {
                  string scripts = System.Web.Optimization.Scripts.Render(paths).ToHtmlString();
                  string hostName = HttpContext.Current.Request.Url.Scheme + Uri.SchemeDelimiter + HttpContext.Current.Request.Url.Authority;
                  string replaced = Regex.Replace(scripts, "src=\"/", "src=\"" + hostName + "/", RegexOptions.Multiline | RegexOptions.IgnoreCase);
                  return new HtmlString(replaced);
              }
          }
      

      这基本上会从 Scripts.Render 中获取 bahvior,然后对其应用绝对 url。然后在视图中你必须写

        @Url.RenderScript("~/bundles/jquery")
      

      而不是

        @Scripts.Render("~/bundles/jquery")
      

      享受编码!...

      【讨论】:

        【解决方案4】:

        ScriptsStyles 来自 System.Web.Optimization 支持RenderFormat方法,可以通过以下方式使用:

        @{
            var hostName = "www.example.com";
            var styleFormat = "<link href=\"" + hostName+ "{0}\" type=\"text/css\" rel=\"stylesheet\"/>";
        }
        
        
        @Styles.RenderFormat(styleFormat, "~/styles/vendor")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-01
          • 2016-09-05
          • 2015-08-07
          • 2013-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-16
          相关资源
          最近更新 更多