CDN脚本故障转移机制

时间:2016-02-10 16:01:47

标签: jquery asp.net-mvc cdn bundling-and-minification

我在MVC应用程序中使用脚本包使用以下代码从CDN加载脚本:

=regexmatch(F3, "[0-1]?[0-9]:[0-5]?[0-9](?:\:[0-5]?[0-9])?")

如果CDN失败,它应该从本地存储库(从项目内部)加载脚本。

我已添加:

bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));

bundles.UseCdn = true;

确保首先加载CDN。

当我从我的网络(公共网络)尝试时,它运行正常:脚本从CDN加载而没有任何问题。

如果我从客户的网络(公司网络)尝试,CDN将被阻止,并且未加载替换脚本。我不明白为什么我实施的故障转移机制无效。

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您使用的代码不是故障转移代码。如果您查看the docs for this,则明确说明如果您只是运行

bundles.Add(new ScriptBundle("~/bundles/jqueryValidate", "//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js").Include("~/Scripts/jquery.validate.min.js"));

CDN将在生产中加载,Include路径将在调试中加载。然后他们说明了

  

jQuery将在发布模式下从CDN请求   调试版本的jQuery将在调试模式下本地获取。什么时候   使用CDN,你应该有CDN的回退机制   请求失败。以下标记片段从结尾处开始   布局文件显示添加到请求jQuery的脚本,如果CDN失败。

他们甚至会给你一个

的示例代码
    <script type="text/javascript">
        if (typeof jQuery == 'undefined') {
            var e = document.createElement('script');
            e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
            e.type = 'text/javascript';
            document.getElementsByTagName("head")[0].appendChild(e);

        }
    </script> 

作为检查以确保加载CND以及是否不进行故障转移。

如果您在.Net 4.5上使用MVC查看CdnFallbackExpression调用,请自动生成,检查并回退。

您也可能会发现this blog from Scott Hanselman也很有帮助。