2016-08-23 85 views
0

我在IIS中有一個網站,網站下面有幾個web應用程序(網站和web應用程序都是mvc web應用程序)。MVC捆綁:如何在兒童webapp中使用家長網站捆綁資源?

網站使用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/[email protected]"></script> 

以及在IIS該網站在我孩子的web應用程序,如果我必須使用相同的捆綁的資源,我可以做(在Web應用程序佈局頁) -

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

當web應用程序瀏覽(例如mywebsite.com/mywebapp),我可以從父網站訪問這些資源,但我無法在樣式和腳本引用中獲得這些querystrings。

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

唯一的區別是我必須使用開始/爲web應用這是不產生查詢字符串的原因。這是一個奇怪的行爲。我在瀏覽webapp時也需要querystring(以避免緩存)。如果我在我的父網站中使用/而不是~,querystring會消失(DISGUSTING)。

是否仍然保留查詢字符串,即使使用/來引用捆綁包?任何幫助將不勝感激。 在此先感謝。

+0

爲什麼要避免在捆綁資源上緩存,爲什麼? – Hackerman

+0

querystring只有在底層資源被修改時才被修改,如果沒有被修改,我們可以從瀏覽器緩存中獲取它們。 –

回答

0

首先,捆綁是以項目爲中心的。沒有辦法在一個應用程序中與另一個孩子共享包。你在這裏做的事情基本上是利用捆綁框架實際上將創建的捆綁包緩存到一個真實文件的事實,然後它允許你像在其他任何靜態JavaScript/CSS文件中那樣在另一個項目中引用它。但是,使用這種方法,您將直接失去一些直接使用捆綁的優點,例如自動追加緩存查詢字符串。

從技術上講,你可以追加你自己的查詢字符串。沒有什麼特別的,真的;它只是一個隨機的字符串,誘使用戶的瀏覽器認爲它是一個不同的資源,從而使它再次獲取它。例如:

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

但是,無論何時更改該包中的任何腳本,您都將負責更新查詢字符串。直接使用實際的bundle,它足夠聰明,可以知道某些東西已經改變並附加了一個不同的查詢字符串,但是如果你只是靜態鏈接,那麼沒有自動化的過程可以爲你做。

+0

我們可以在'IIS'中的根網站內部創建多個應用程序,並且我能夠從根引用資源到其他應用程序,但無法獲得mvc捆綁的好處。 –