【发布时间】:2013-01-28 02:34:22
【问题描述】:
使用内置的 MVC4 捆绑器,我如何将我的 CDN url 添加到它生成的链接标签中?我已经设置了 Amazon Cloudfront,以便它在第一次请求时从我的网络服务器中提取资产。所以当我像这样定义一个包时:
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/reset.css",
"~/Content/960_24_col.css",
"~/Content/Site.css"
));
部署后,我可以这样引用它:
http://[cloundfrontid].cloudfront.net/Content/css?v=muhFMZ4thy_XV3dMI2kPt-8Rljm5PNW0tHeDkvenT0g1
现在我只需要将捆绑程序生成的链接从相对于指向我的 CDN 的绝对链接更改。
<link href="[INSERT_CDN_URL_HERE]/Content/css?v=muhFMZ4thy_XV3dMI2kPt-8Rljm5PNW0tHeDkvenT0g1" rel="stylesheet"/>
我认为可以使用 IBundleTransform 重写路径,但我找不到任何示例。
注意: 为了清楚起见,我知道您可以为捆绑包指定 CDN 链接,但这只有在捆绑包可以被静态链接替换时才有效。
【问题讨论】:
-
为什么不能使用指向 CDN 的静态链接?
-
因为我不知道编译时该链接是什么。捆绑器使用缓存破坏字符串动态分配它,例如/Content/css?v=muhFMZ4thy_XV3dMI2kPt-8Rljm5PNW0tHeDkvenT0g1
-
您的CDN实际上是在使用查询字符串来打开它返回的内容?您不能直接将版本硬编码到您的 CDN 中吗?即 /content/css1 并且每次修改捆绑包时都会碰到它?
-
我明白你在说什么:通过手动设置查询字符串来控制自己的缓存破坏。说得通。理想情况下,我希望完全自动化部署过程,因为这是我忘记增加的事情。
标签: c# asp.net-mvc-4 cdn bundling-and-minification