2016-08-23 49 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捆绑的好处。 –