簡體   English   中英

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

[英]ASP.NET MVC bundles in Classic ASP (or PHP etc.)

我們有混合應用程序,它仍然運行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啟動代碼可以達到的。

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);

這將生成文件dyn_legacy_bundle.inc,其中包含正確的<script> -tags,其中包含版本哈希(如果啟用了調試,則為調試版本)。

在經典ASP(或一些變態的PHP等):

<head>
   <!--#include file="dyn_legacy_bundle.inc" -->
</head>

然后,這將使用ASP.NET啟動時生成的文件,並使用捆綁的css / javascript。

否定的是,如果在運行時更改了捆綁文件,則不會更新此動態文件。 這將導致捆綁不被緩存。 應用程序池回收最終將修復緩存,所以我認為我們會接受它。 如果你想辦法避免這種情況,請告訴我。

請注意,這也適用於任何其他框架(即PHP)

另外一個選項:

設置處理程序(即Bundles.ashx)

 public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/html";
    context.Response.Write(System.Web.Optimization.Styles.Render("~/css"));
}

來自php:

echo file_get_contents("http://example.com/Bundles.ashx");

您可以使用查詢字符串指定不同的包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM