You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Bundle是否支持引入解决方案外的外部托管静态资源文件?

报错根本原因

默认的ScriptBundle.Include方法仅支持当前应用内的相对路径(~/开头的路径),直接传入外部绝对URL就会触发 "Only application relative URLs (~/url) are allowed." 报错。

根据你的需求场景,可以选择以下两种可行方案:


方案1:使用官方CDN支持(推荐,无需自定义改造)

如果你的需求只是让页面最终引用外部托管的JS文件,不需要把该外部文件和本地其他文件合并打包,用官方内置的CDN配置即可:

  1. 先全局开启CDN使用开关
BundleTable.EnableCdn = True
  1. 使用ScriptBundle的双参数构造函数,第二个参数传入外部资源的地址
' 拼接外部托管的jQuery文件地址
Dim jqueryCdnPath = $"{apiBaseUrl}/jquery-2.1.1.min.js"
bundles.Add(New ScriptBundle("~/bundles/jquery", jqueryCdnPath).Include(
                ' 此处填写本地备用文件路径,CDN加载失败时会自动降级使用本地资源
                "~/jquery-2.1.1.min.js"
            ))

如果不需要本地降级资源,也可以配置CdnFallbackExpression实现前端侧的资源可用性校验,无需在本地存放对应文件,示例:

Dim jqueryBundle = New ScriptBundle("~/bundles/jquery", jqueryCdnPath)
' 校验CDN加载的jQuery是否生效
jqueryBundle.CdnFallbackExpression = "window.jQuery"
bundles.Add(jqueryBundle)

方案2:自定义VirtualPathProvider实现外部资源合并打包

如果你需要把外部托管的JS文件和本地其他JS文件合并压缩成同一个打包后的Bundle文件,需要自定义虚拟路径提供者来让Bundle可以读取外部资源内容:

  • 新建类继承VirtualPathProvider,重写FileExists、GetFile方法,当路径匹配你约定的外部资源标识时,通过HTTP请求拉取外部资源的内容返回
  • 在应用启动时将自定义的VirtualPathProvider注册到HostingEnvironment.VirtualPathProvider
  • 之后即可在Include方法中使用约定的虚拟路径来引入外部资源,实现跨域资源的合并打包

内容的提问来源于stack exchange,提问作者JanT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:06