6

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

例如。

资源:/Content/Images/Foo.png

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

4

3 回答 3

7

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

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

这是我从这里读到的:

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

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

于 2010-04-21T09:27:56.773 回答
1

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

于 2010-04-21T14:34:22.877 回答
0

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

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

于 2010-04-21T10:00:31.423 回答