经典ASP(或PHP等)中的ASP.NET MVC包

Tuu*_*oos 6 asp.net asp.net-mvc optimization asp-classic bundling-and-minification

我们有混合应用程序,它仍然运行ASP.NET MVC中的经典ASP应用程序的一部分.我想在经典ASP中也使用捆绑的javascript和样式.

在ASP.NET中,我们可以很好地使用捆绑的东西和缓存,我们使用Script.Render,它将版本哈希添加到fetch url.

事实上,这种方法当然不适用于Classic ASP.

我们可以直接从html使用捆绑<script src="bundles/js?v=<%=version%>"/>.version变量是缓存清除中使用的经典ASP变量(强制浏览器刷新).它在版本之间进行了更改.

问题是如果经典ASP没有给捆绑请求提供正确的哈希,MVC捆绑将返回标头caching: no-caching,这将指示浏览器不缓存它.

你有什么好主意吗?可以在经典ASP中计算哈希吗?你能告诉捆绑在没有v = hash的情况下允许缓存吗?可以在启动时从MVC传输v = hash吗?我们有在Classic ASP和MVC之间传输变量的机制,但是这种哈希是从MVC启动代码可以达到的.

Tuu*_*oos 3

AardVark 的疯狂想法给了我一些想法,我自己想出了办法。解决方案本身非常简单。

这是为可能需要类似解决方案的任何人提供的解决方案。

在 ASP.NET MVC 中注册捆绑包(Global.asax.cs 或 BundleConfig)后:

        List<string> bundleHtml = new List<string>();
        bundleHtml.Add(Scripts.Render("~/bundles/legacybase").ToString());
        bundleHtml.Add(Styles.Render("~/styles/legacycss").ToString());
        File.WriteAllLines(Server.MapPath("~/dyn_legacy_bundle.inc"), bundleHtml, System.Text.Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

这将生成文件 dyn_legacy_bundle.inc,其中包含正确的<script>标签,其中包含版本哈希(或调试版本,如果启用了调试)。

在经典 ASP(或一些古怪的 PHP 等)中:

<head>
   <!--#include file="dyn_legacy_bundle.inc" -->
</head>
Run Code Online (Sandbox Code Playgroud)

然后,这将使用 ASP.NET 启动时生成的文件,并使用捆绑的 css/javascript。

不利的是,如果捆绑文件在运行时发生更改,则该动态文件不会更新。这将导致包不被缓存。应用程序池回收最终将修复缓存,所以我认为我们会接受它。如果您找到避免这种情况的方法,请告诉我。

请注意,这也适用于任何其他框架(即 PHP)