ASP.NET MVC路由和静态数据(即图像、脚本等)

6
如果我在ASP.NET MVC1(或2) Web应用程序中对静态资源(例如图像、JavaScript文件或CSS文件)发出请求,.NET框架是否会尝试查看该请求是否匹配路由列表,最终找不到控制器?例如,资源为/Content/Images/Foo.png,此请求是否会通过我的路由列表,无法将任何控制器/操作与此请求匹配,然后直接尝试该路径?请注意保留HTML标记。
3个回答

7
您可以选择是否映射现有文件,设置RouteCollection.RouteExistingFiles属性。
引用如下: 获取或设置一个值,指示ASP.NET路由是否应处理与现有文件匹配的URL。
这里阅读到了以下内容:
然而,路由系统仍会检查文件系统以查看传入的URL是否恰好匹配文件或磁盘,如果是,则路由将忽略请求(绕过任何URL也可能匹配的路由条目),以便直接提供该文件。这对于静态文件(例如图像、CSS和JavaScript文件)非常方便。您可以将它们保存在项目中(例如,保存在/Content或/Script文件夹中),然后直接引用和提供它们,就像您根本没有使用路由一样。由于文件确实存在于磁盘上,因此优先级高于路由配置。
如果您希望路由配置优先于磁盘上的文件,则可以将RouteCollection的RouteExistingFiles属性设置为true。(默认情况下为false)。

所以你的意思是,它首先尝试在磁盘上找到文件(例如foo.png、something.js、some.ico或其他任何文件)。如果无法找到文件,则会启动路由系统。因此,当它进入我的IControllerFactory(例如)时,假定资源在物理上不存在于磁盘上。最后,这是针对默认配置集的(即RouteExistingFiles = false)。 - Pure.Krome

1

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


0

你也可以在IIS中使用一个小技巧。我将我的js、图片、css等文件存储在虚拟目录下的Content文件夹中。

如果你在Content文件夹上右键点击,选择属性(在IIS管理器中),将其创建为虚拟目录,然后删除通配符映射。接着将Content文件夹设置回普通目录。这样就可以防止aspnet_isapi处理这些文件的请求了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接