我在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将被阻止,并且未加载替换脚本。我不明白为什么我实施的故障转移机制无效。
你知道为什么会这样吗?
答案 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也很有帮助。