2009-02-22 36 views
22

Content文件夹是MVC底层框架特有的吗?我在路由代码或配置中找不到任何对它的引用。asp.net mvc中的内容文件夹是否是神圣的?

我只是想知道如果静态内容可以用不同的方式处理。

相关提示,计算器的脚本和CSS内容似乎是版本号的查询字符串检索:

<link href="/Content/all.min.css?v=2516" rel="stylesheet" type="text/css" /> 

护理猜测这是如何工作的,以及为什么这很重要?

+0

@BC,我问了同样的问题,因为我也很好奇。关于是的CSS文件。退房:http://stackoverflow.com/questions/502600/versioning-css-files-with-a-query-string-like-stackoverflow-does – mmcdole 2009-02-23 10:57:53

回答

18

没有魔力,System.Web.Routing.RouteCollection类有一个控制行为的属性RouteExistingFiles。

默认值为false,这意味着ASP路由不应该路由URL,而只是返回默认内容。在这种情况下,“/Content/all.min.css?v=251”完全跳​​过了MVC路由规则。

如果要为内容文件夹添加路由规则,则需要添加规则并将RouteExistingFiles设置为true。

4

我在我的一些网站上使用了相同的技术。我用它来避免缓存 - 如果你没有为不同的版本指定不同的URL,客户端可能已经缓存了旧版本。

+0

好的观察,我知道这一定是推理。 – 2009-02-22 20:07:19

+2

我一直使用mysite.css?v = xx - 屁股巨大的痛苦,否则告诉你的客户清除他们的缓存或移位刷新 – Slee 2009-02-22 20:09:03

+0

这是推理,杰夫阿特伍德甚至在SO播客期间自己这么说。 – 2009-02-23 00:01:35

1

它没有特别的意义。这只是一个仲裁名称。如果您使用ASP.NET MVC RC的精灵,你会发现它是你的母版页(的Site.Master)内引用:

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 

如SO到all.min.css使用,它可能是一个自定义处理程序,它在服务器上执行以按版本检索压缩的样式表。

+0

那么你是说在选择一个控制器路由到之前,路由处理程序首先查找实际的物理文件夹名称?我的测试似乎表明可能是发生了什么。 – 2009-02-22 20:10:09

5

不,内容文件夹不是神圣的。只要你喜欢就用它。

重新提供版本 - 如果您启用了基于http-header的缓存,那么这是常用技巧来帮助进行版本控制;否则,您无法保证所有客户端都使用更新的文件。你会看到很多的“foo_v4.js”等在网络上;-p

3

只需添加到这个的其他意见 - 路由系统的工作方式如下:

请求到来在路由引擎中,路由引擎然后通过路由表查找匹配 - 按照它们注册的顺序(这就是为什么你应该在更一般的路由之前放置更具体的路由)。

如果找不到匹配项,路由引擎会将请求传递给IIS以正常处理 - 这也是您如何在同一应用程序中混合ASP.NET Webforms和MVC的方式。

相关问题