在ASP.NET MVC包中使用CDN

ser*_*hio 9 .net c# asp.net-mvc jquery asp.net-mvc-4

我阅读了有关捆绑和通知的文章,特别是关于使用CDN的文章,但有些事情我不清楚.

有这样的例子:

public static void RegisterBundles(BundleCollection bundles)
{
    //bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    //            "~/Scripts/jquery-{version}.js"));

    bundles.UseCdn = true;   //enable CDN support

    //add link to jquery on the CDN
    var jqueryCdnPath = 
        "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js";

    bundles.Add(new ScriptBundle("~/bundles/jquery",
                jqueryCdnPath).Include(
                "~/Scripts/jquery-{version}.js"));

    // Code removed for clarity.
}
Run Code Online (Sandbox Code Playgroud)
  1. 是否有可能使用{version}CDN引用的格式,如"本地"引用?

  2. 在捆绑包中包含已经缩小的脚本版本(如jquery-1.7.1.min.js)有什么意义?如果它不存在怎么办?它不应该搜索.min文件是否存在和/或分别生成它?

Vij*_*iya 6

using System.Web;
using System.Web.Optimization;

namespace MvcApp
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery", "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js").Include("~/Scripts/jquery-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/bootstrap","https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js").Include("~/Scripts/bootstrap.js"));

            bundles.Add(new StyleBundle("~/Content/css", "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css").Include("~/Content/bootstrap.css"));

            BundleTable.EnableOptimizations = true;
            bundles.UseCdn = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

许多开发人员没有意识到的是ScriptBundle和StyleBundle的类构造函数有一个重载,它需要两个字符串参数,例如,对于ScriptBundle,它将是ScriptBundle(string,string),对于StyleBundle,它将是StyleBundle(字符串,字符串)。第一个参数是虚拟路径,第二个参数是cdnPath。

我们可能会问自己,是否需要两个参数,MVC如何知道要使用哪个参数?好吧,仅当BundleTable.EnableOptimizations属性设置为true时,才使用cdn位置。

将EnableOptimization属性设置为true会告诉MVC使用使用文件的缩小版本而不是常规版本。

当此属性设置为true且存在CDN路径时,MVC将使用CDN路径而不是本地虚拟路径。
您还必须将另一个属性设置为true,即bundles.UseCdn。
这告诉MVC使用CDN位置而不是本地版本。如果BundleTable.EnableOptimization设置为false,则本地版本将自动用作后备版本,因为cdn版本是缩小版本

阅读此博客可清楚了解您的想法:

http://www.techjunkieblog.com/2015/06/aspnet-mvc-5-configure-bundleconfig.html


Mar*_*k S 0

  1. 据我所知你不能。但是您可以保留一个 cdns 表并在加载捆绑包时进行填充。当您希望使用新版本时,请添加/替换数据库中的条目。

        //get from db
        List<string> cdns = new List<string>();
        foreach (string cdn in cdns)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery",cdn).Include("~/Scripts/jquery-{version}.js"));
        }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我同意最重要的部分。对于问题中不存在的部分,请向下滚动并阅读“使用 CDN”。有一个例子展示如何检查。我认为您基本上需要有一个本地副本作为您可以引用另一个 CDN 的备份。