【问题标题】:Is the Content folder sacred in asp.net mvc?asp.net mvc 中的 Content 文件夹是神圣的吗?
【发布时间】:2009-02-22 19:58:49
【问题描述】:

Content 文件夹是 MVC 底层框架特有的吗?我在路由代码或配置中找不到对它的任何引用。

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

在相关说明中,stackoverflow 的脚本和 css 内容似乎是通过查询字符串中的版本号检索的:

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

想推测一下这可能如何工作以及为什么这很重要?

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    不,内容文件夹不是神圣的。随心所欲地使用它。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 好观察,我知道这一定是推理。
      • 我一直在使用 mysite.css?v=xx - 否则会告诉您的客户清除缓存或移动刷新
      • 这就是推理,Jeff Atwood 甚至在 SO 播客中自己也这么说过。
      【解决方案4】:

      只是添加到其他 cmets - 路由系统的工作方式如下:

      一个请求进来,并被定向到路由引擎,然后在路由表中查找匹配项 - 按照它们注册的顺序(这就是为什么您应该将更具体的路由放在更一般的路由之前)。

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

      【讨论】:

      • 但是 Content/ 查询不匹配我的默认路由吗?
      • 不,因为你没有一个叫做 ContentController 的控制器来匹配它。
      【解决方案5】:

      它没有特殊含义。这只是一个随意的名字。如果您使用 ASP.NET MVC RC 的向导,您会发现它在您的母版页 (Site.master) 中被引用:

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

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

      【讨论】:

      • 那么您是说路由处理程序在选择要路由到的控制器之前首先查找实际的物理文件夹名称?我的测试似乎表明这可能是正在发生的事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多