【问题标题】:ASP.NET MVC routing and static data (ie. images, scripts, etc)ASP.NET MVC 路由和静态数据(即图像、脚本等)
【发布时间】:2010-04-21 08:50:28
【问题描述】:

如果我在我的 ASP.NET MVC1(或 2)Web 应用程序中请求静态资源的资源,比如说...图像或 javascript 文件或 css 文件... .NET 框架尝试查看请求是否与路由列表匹配...最终找不到控制器?

例如。

资源:/Content/Images/Foo.png

此请求是否通过我的路由列表.. 无法将任何控制器/操作与此请求匹配,然后直接尝试该路径?

【问题讨论】:

    标签: asp.net-mvc routing static-resource


    【解决方案1】:

    您可以选择是否映射现有文件设置RouteCollection.RouteExistingFiles属性

    获取或设置一个值,指示 ASP.NET 路由是否应该处理 与现有文件匹配的 URL。

    这是我从here读到的内容:

    但是,路由系统仍然会检查文件系统以查看是否存在 传入的 URL 恰好匹配一个文件或磁盘,如果匹配,路由会忽略该请求(绕过 URL 也可能匹配的任何路由条目),以便直接提供文件。 这对于静态文件非常方便,例如图像、CSS 和 JavaScript 文件。你可以 将它们保存在您的项目中(例如,在您的 /Content 或 /Script 文件夹中),然后参考和 直接为它们提供服务,就像您根本不使用路由一样。由于文件真实存在 在磁盘上,它优先于您的路由配置。

    如果您希望路由配置优先于磁盘上的文件,您可以设置 RouteCollection 的 RouteExistingFiles 属性为 true。 (默认为 false。)

    【讨论】:

    • 所以你的意思是,它首先尝试在磁盘上查找文件(例如 foo.png、something.js、some.ico 等)。如果它不能这样做,它就会启动路由系统。因此,当它进入我自己的 IControllerFactory(例如)时,它假定该资源实际上并不存在于磁盘上。最后,这是针对默认配置集(即 RouteExistingFiles = false)。
    【解决方案2】:

    默认情况下,路由引擎将忽略服务器上物理存在的所有文件的路由映射。简而言之,您无需为 MVC 应用程序链接到静态文件做任何事情。

    【讨论】:

      【解决方案3】:

      您还可以在 IIS 中做一些小技巧。我将我的 js、图像、css 等存储在虚拟目录下的 Content 文件夹中。

      如果您随后查看 Content 文件夹的属性(在 IIS 管理器中),请将其创建为虚拟目录,然后删除通配符映射。然后将 Content 文件夹设置回普通目录。这应该会停止对这些由 aspnet_isapi 处理程序处理的文件的请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        • 1970-01-01
        相关资源
        最近更新 更多