CDN路径在MVC中的js捆绑中不起作用

时间:2013-06-13 09:39:55

标签: c# asp.net-mvc asp.net-mvc-4 cdn bundling-and-minification

我正在研究ASP.NET MVC4。客户端需要从捆绑的其他域(如CDN)加载所有javascripts和css。我使用过System.Web.Optimization。

下面是代码。

 var bundle = new ScriptBundle("~/bundles/scripts/");
bundle.Orderer = new AsIsBundleOrderer();
bundle.EnableFileExtensionReplacements = false;
bundle.CdnPath = "http://js.cusomdomainname.com";
bundle.Include("~/Scripts/jquery-1.7.1.min.js",
                "~/Scripts/jquery.unobtrusive-ajax.min.js",
                "~/Scripts/jquery.validate.min.js",
                "~/Scripts/jquery.validate.unobtrusive.min.js");

BundleTable.Bundles.UseCdn = true;
BundleTable.EnableOptimizations = true;
BundleTable.Bundles.Add(bundle);
BundleTable.Bundles.IgnoreList.Clear();

在视图

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

但它不是从另一个域渲染。

可能是什么问题?

2 个答案:

答案 0 :(得分:5)

此示例显示了如何在“发布”中从CDN加载资源'模式和本地来自' debug'模式。

var jqueryCdnPath = "//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js";
var jqueryBundle = new ScriptBundle("~/bundles/jqueryCdn", jqueryCdnPath)
                       .Include("~/Scripts/jquery-{version}.js");

BundleTable.Bundles.Add(jqueryBundle);

CdnPath指的是您想要从CDN获取的资源,Include告诉您在本地查找的位置。您可以从Web.config更改请求的那个。将<compilation debug="true"/>设置为使用本地文件,将<compilation debug="false"/>设置为使用CDN。

有关详细信息,请参阅此Bundling and Minification文章。

答案 1 :(得分:1)

我不关心cdnPath stuff在捆绑中的工作方式,因为你只能为整个bundle指定一个文件路径。如果您想设置一个简单的origin-pull CDN,则可以更轻松地执行以下操作:

@Scripts.RenderFormat(
    "<script src='http://js.cusomdomainname.com{0}'></script>",
    "~/bundles/scripts/")

如果您拥有包含大量不同文件的包,无论是否启用了优化,都可以使用。

这也解决了here

描述的查询参数的问题