将 CDN url 添加到 mvc 4 捆绑器输出

2024-01-01

使用内置的 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 链接,但只有当捆绑包可以替换为静态链接时才有效。


我刚刚设置 MaxCDN 并遇到了同样的问题。

如您所知,bundles.UseCdn属性并不理想,因为我们不想指定包的确切 url。像 Max CDN 这样的 CDN 具有完全相同的 url、查询字符串等,除了不同的子域之外。

这是我最终解决它的方法。

我创建了一个BundleHelper类将包装渲染方法,然后在路径前面添加 CDN 子域。

该类如下所示:

namespace MyDomain.Web.Helpers
{
    public class BundleHelper
    {
        public static string CdnPath = "http://cdn.mydomain.com";

        public static IHtmlString RenderScript(string path)
        {
            var opt = System.Web.Optimization.Scripts.Render(path);
            string htmlString = HttpUtility.HtmlDecode(opt.ToHtmlString());

            if (BundleTable.EnableOptimizations)
            {
                htmlString = htmlString.Replace("<script src=\"/", String.Format("<script src=\"{0}/", CdnPath));
            }

            return new HtmlString(htmlString);
        }

        public static IHtmlString RenderStyle(string path)
        {
            var opt = System.Web.Optimization.Styles.Render(path);
            string htmlString = HttpUtility.HtmlDecode(opt.ToHtmlString());

            if (BundleTable.EnableOptimizations)
            {
                htmlString = htmlString.Replace("<link href=\"/", String.Format("<link href=\"{0}/", CdnPath));
            }

            return new HtmlString(htmlString);
        }
    }
}

然后要在视图中使用它,我只需执行以下操作:

@BundleHelper.RenderStyle("~/Content/css")
@BundleHelper.RenderStyle("~/Content/themes/base/css")

@BundleHelper.RenderScript("~/bundles/jquery")
@BundleHelper.RenderScript("~/bundles/jqueryui")

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CDN url 添加到 mvc 4 捆绑器输出 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 从 PHP 脚本与扫描仪对话

    我经营一家小企业 但我需要在收到的信件和发票方面更有条理 这就是我想要实现的目标 当我收到发票或其他纸质信息时 我会将其放入扫描仪托盘中并留在那里 每隔 15 分钟 我的 Linux 机器就会询问我的扫描仪是否有任何要扫描的内容 如果有 则
  • java.lang.UnsupportedOperationException:没有已知的类 jenkins.tasks.SimpleBuildWrapper 的实现在 jenkins 中被命名为 BuildUser

    我在 Jenkins 中准备脚本如下 在构建作业时出现错误 这项工作是向用户发送电子邮件input进行下一步 Pipeline End of Pipeline java lang UnsupportedOperationException
  • 使用 numpy 获取每行的唯一计数〜和〜唯一值

    我试图获得与 np unique 等效的值 但带有 axis 1 选项 a np array 8 8 8 5 8 8 2 0 8 8 4 5 4 2 4 4 6 5 2 6 我希望获取每行中计数最高的值并将其保存到一维向量中 基本上是 每行
  • 如何上传带有附加参数的 IFormFile

    我有一个现有的 API 它正在从请求正文中读取数据 HttpPost public async Task
  • 如何限制应用程序可以分配的内存

    我需要一种方法来限制服务可以分配的内存量 以防止服务导致系统饥饿 类似于 SQL Server 允许您设置 最大服务器内存 的方式 我知道 SetProcessWorkingSetSize 并不完全符合我的要求 但我试图让它按照我认为应该的
  • 启动应用程序时 Py2App PIL 图像错误

    我正在使用 py2app 将 python 文件转换为应用程序 但遇到了此错误 Traceback most recent call last File Users MYUSER PycharmProjects webstuff BotTe
  • 从大表达式中提取与模式匹配的表达式

    我有一个包含单个平方根的 Mathematica 表达式 示意性地 expr a b Sqrt c where a b c是大表达式 我想提取 sqrt 下的表达式 例如通过匹配模式 例如 Match expr Sqrt x should
  • 如何在 Liferay 中检索用户个人资料图片

    我想检索用户个人资料图片 我该怎么做 您能分享一下代码片段吗 我使用 Liferay 6 0 6 它只有 user getPortraitId 而没有 user getPortraitURL 那么一旦我在 JAVA 类中获得了肖像 id 我
  • Modaldialog 对 Enter/ESC 没有反应

    I have a modaldialog with an OK and a Cancel button For the OK I set the Default property to True and for the Cancel but
  • 如何在Java中使用keystore来存储私钥?

    我用过KeyPairGenerator生成 RSA 密钥对 如果我没记错的话 KeyStore 仅用于存储证书而不是密钥 如何在电脑上正确存储私钥 注意 此代码仅用于演示目的 将私钥存储在磁盘上时必须对其进行加密 不要按原样使用它 你可以这
  • 时间:2019-05-17 标签:c#MainWindowHandlealwayszero

    我读了一些关于 MainWindowHandle 的线程 但我找不到问题的解决方案 我正在启动一个 gui 应用程序 并希望通过进程对象获取 MainWindowHandle 但如果我不打算 则句柄值始终为零等待 thread sleep
  • 自动或使用快捷方式删除尾随空格

    有没有办法删除 Visual Studio Code 中的尾随空格 自动或使用快捷方式 我一直在命令选项板和编辑器设置中寻找此内容 但找不到我要找的内容 您可以启用空白修剪文件保存时间从设置 打开 Visual Studio Code 用户
  • zone.js 和 Jasmine 时钟之间的冲突

    我正在使用 Jasmine 测试套件 其中包括 普通 Jasmine 测试以及一些 Angular 2 组件的 Jasmine 测试 由于 Angular 2 的包含 zone js 被加载 这与 Jasmine 的时钟产生了冲突 例如 以
  • 为什么不在构造函数中调用可重写的方法?

    这是一个过于简化的示例 但我有一些现实生活中的代码在概念上执行相同的操作 尝试验证派生类的值 设置 访问器方法 并且分析器给我 不要在构造函数中调用可重写的方法 我试图弄清楚是否应该更改代码 或者忽略警告 我想不出有什么理由应该留意这个警告
  • 前向声明 cv::Mat

    您好 我正在尝试转发声明 cv Mat 类 但我无法让它工作 它给出了消息字段 frame 的类型不完整 OpenGlImpl h namespace cv class Mat class OpenGLImpl private cv Mat
  • 删除所有构造函数(或其他函数)的最佳样式?

    假设我想创建一个无法构造的类型 不要问为什么 struct Impossible 我可以这样做 Impossible delete disable automatically generated constructors don t dec
  • 如何获取Vim中所有环境变量的列表?

    当 Vim 启动时 它会从操作系统获取许多环境变量 例如PATH 并且它还设置了自己的环境变量 例如MYVIMRC 我如何list或者查看 Vim 理解的所有环境变量 以及 Vim 内部它们各自的值 在 Vimscript 中 没有直接的方
  • Firebase 身份验证/未经授权的域。域名未授权

    我正在尝试运行这个sample https github com firebase functions samples tree master quickstarts email usersfirebase 项目 但我不断在浏览器控制台中收
  • Jquery.inputmask 不工作

    尝试使用 Robin Herbots Inputmask 模块 但无法使其工作 查看所有其他类似的帖子 一个常见问题是确保 docment ready 函数调用 inputmask 但这对我来说看起来很好 Scripts
  • 将 CDN url 添加到 mvc 4 捆绑器输出

    使用内置的 MVC4 捆绑器 如何将我的 CDN url 添加到它生成的链接标签中 我已经设置了 Amazon Cloudfront 以便它在第一次请求时从我的网络服务器中提取资产 所以当我像这样定义一个包时 bundles Add new