【问题标题】:MVC Bundling: How to use parents website bundled resources in child webapp?MVC 捆绑:如何在子 webapp 中使用父母网站捆绑的资源?
【发布时间】:2016-12-30 06:24:39
【问题描述】:

我在 IIS 中有一个网站,网站下有几个 web 应用程序(网站和 web 应用程序都是 mvc web 应用程序)。

网站使用 ASP.NET MVC 捆绑 -

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new StyleBundle("~/Content/css")
    .IncludeDirectory("~/Content/Styles", "*.css", true));

    bundles.Add(new ScriptBundle("~/Content/js")
    .IncludeDirectory("~/Content/Scripts", "*.js", true));
}

在网站_Layout.cshtml -

@Styles.Render("~/Content/css")
@Script.Render("~/Content/js")

当浏览网站(例如 mywebsite.com)时,我可以看到附加到这些引用的查询字符串。

<link href="/Content/css?v=asdsf$dfsdfdslkko" rel="stylesheet" />
<script src="/Content/js?v=jjkase$rads@asdasd"></script>

对于我在 IIS 中该网站下的子 Web 应用程序,如果我必须使用相同的捆绑资源,我可以这样做(在 webapp 布局页面中)-

@Styles.Render("/Content/css")
@Script.Reder("/Content/js")

当浏览 webapp(例如 mywebsite.com/mywebapp)时,我可以从父网站访问这些资源,但我无法在样式和脚本引用中获取这些查询字符串。

<link href="/Content/css" rel="stylesheet" />
<script src="/Content/js></scripts>

唯一的区别是我必须为 webapp 使用启动 /,这是不生成查询字符串的原因。这是一种奇怪的行为。我在浏览 webapp 时也需要查询字符串(以避免缓存)。如果我在我的父网站中也使用/ 而不是~,查询字符串就会消失(令人厌恶)。

即使/ 用于引用包,是否仍保留查询字符串?任何帮助将不胜感激。 提前致谢。

【问题讨论】:

  • 为什么要避免在捆绑资源上缓存,为什么?
  • 查询字符串只有在底层资源被修改时才会改变,如果没有被修改,我们可以从浏览器缓存中获取。

标签: c# asp.net asp.net-mvc iis bundling-and-minification


【解决方案1】:

首先,捆绑是以项目为中心的。没有办法在一个应用程序中与另一个应用程序共享捆绑包,无论是否是子应用程序。您在这里所做的实际上是利用捆绑框架实际上将创建的捆绑包缓存到一个真实文件的事实,然后您可以像在任何其他随机静态 JavaScript/CSS 文件中一样在其他项目中引用它。但是,使用这种方法,您将失去直接使用捆绑包的一些细节,例如自动附加缓存清除查询字符串。

从技术上讲,您可以附加自己的查询字符串。它没有什么特别之处,真的;它只是一个随机字符串,诱使用户的浏览器认为它是不同的资源,从而使其再次获取它。例如:

<script src="/Content/js?foo123></scripts>

但是,每当您更改该捆绑包中的任何脚本时,您都将负责更新查询字符串。直接使用实际的捆绑包,它足够聪明,可以知道某些内容发生了变化并附加不同的查询字符串,但如果您只是静态链接,那么就没有自动化的过程可以为您做到这一点。

【讨论】:

  • 我们可以在IIS的根网站内创建多个应用程序,我可以从根目录引用资源到其他应用程序,但无法获得mvc捆绑的好处。
猜你喜欢
  • 2021-11-16
  • 2012-10-31
  • 2013-08-27
  • 2021-05-08
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 2013-12-06
相关资源
最近更新 更多