【问题标题】:Asp.net MVC Bundle - Only application relative URLs (~/url) are allowedAsp.net MVC Bundle - 仅允许应用程序相对 URL (~/url)
【发布时间】:2026-01-19 13:15:02
【问题描述】:

在 bundle 中包含脚本时出现以下错误。有没有办法解决这个问题

网址“/Scripts/bootstrap.js?1.0.0.1”无效。仅有的 允许应用相对 URL (~/url)。

我们正在使用 CDN,因此 URL 将被创建为“bootstrap.js?1.0.0.1”。我发现了几篇文章,但没有解决问题。

【问题讨论】:

  • 你不会捆绑远程资源;您将拥有 CDN 上的资源已经捆绑/缩小(因此作为传统的 <script> 参考包含在内)。
  • 错误很明显,将~ 添加到路径的开头,. ~ 是应用程序根的同义词。
  • 为了补充 James 的回答,捆绑程序需要“硬”访问文件,而不是远程访问资源。因此,要求~/ 只是确保它是无需往返即可访问的本地资源。

标签: asp.net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

您可以将 MVC 捆绑包与 CDN 一起使用。显然,与任何 CDN 一样,您应该有某种回退计划(通常是本地副本),以防 CDN 不可用。 (我说从来没有真正打扰过,但仅仅因为我很懒并不意味着你应该这样做!)

public static void RegisterBundles(BundleCollection bundles)
{

    bundles.UseCdn = true;   //enable CDN support

    //add link to bootstrap on the CDN
    var bootstrapCdnPath = "http://domain.to/bootstrap.cdn";

    bundles.Add(new ScriptBundle("~/bundles/bootstrap",
                bootstrapCdnPath));

}

请注意,这始终使用 CDN,即使在调试模式下也是如此。请参阅http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification(当它启动时,或使用 Google 缓存)了解有关如何在调试时使用本地副本(例如,非缩小)的更多信息。

【讨论】:

  • "通常是本地副本" -- 使用 .NET MVC,您的其他选择是什么?
【解决方案2】:

您收到的错误是您的网址不是相对的。 URL '/Scripts/bootstrap.js?1.0.0.1' 指的是实际的 url http:////Scripts/bootstrap.js?1.0.0.1 - 这是一个静态 URL

显然这不是您想要达到的目标。您正在尝试实现http://yourdomain.com/Scripts/bootstrap.js?1.0.0.1 的引用。

要实现这一点,您需要确保它与您的域相关(因此是相对路径),方法是在您希望引用的资源前面写上字符 ~,因为这代表您的域。

为此写:

~/Scripts/bootstrap.js?1.0.0.1

【讨论】:

    最近更新 更多