0

我的一些应用程序“样式”和“脚本”是从不同的环境应用程序中引用的。

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

我尝试在下面的捆绑包上使用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()?

4

4 回答 4

1

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

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")

享受编码!...

于 2014-04-25T10:54:16.577 回答
0

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

于 2013-02-06T18:52:11.130 回答
0

例如,尝试一些这样的:

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

好吧,我可以做到。我能做的是将多个样式组合在一个包中。

祝你好运!

于 2014-02-05T18:31:43.733 回答
0

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")
于 2016-02-19T10:23:52.677 回答