如果我在我的 ASP.NET MVC1(或 2)Web 应用程序中请求资源以获取静态资源,例如...图像或 javascript 文件或 css 文件... .NET 框架是否尝试查看如果请求与路由列表匹配……最终找不到控制器?
例如。
资源:/Content/Images/Foo.png
此请求是否通过我的路由列表.. 无法将任何控制器/操作与此请求匹配,然后直接尝试该路径?
如果我在我的 ASP.NET MVC1(或 2)Web 应用程序中请求资源以获取静态资源,例如...图像或 javascript 文件或 css 文件... .NET 框架是否尝试查看如果请求与路由列表匹配……最终找不到控制器?
例如。
资源:/Content/Images/Foo.png
此请求是否通过我的路由列表.. 无法将任何控制器/操作与此请求匹配,然后直接尝试该路径?
您可以选择是否映射现有文件或不设置RouteCollection.RouteExistingFiles
属性
获取或设置一个值,该值指示 ASP.NET 路由是否应处理与现有文件匹配的 URL。
这是我从这里读到的:
但是,路由系统仍然会检查文件系统以查看传入的 URL 是否恰好与文件或磁盘匹配,如果是,路由会忽略该请求(绕过该 URL 也可能匹配的任何路由条目),以便该文件将直接送达。这对于静态文件非常方便,例如图像、CSS 和 JavaScript 文件。您可以将它们保存在您的项目中(例如,在您的 /Content 或 /Script 文件夹中),然后直接引用和提供它们,就像您根本不使用路由一样。由于该文件确实存在于磁盘上,因此优先于您的路由配置。
相反,如果您希望路由配置优先于磁盘上的文件,则可以将 RouteCollection 的 RouteExistingFiles 属性设置为 true。(默认为假。)
默认情况下,路由引擎将忽略服务器上物理存在的所有文件的路由映射。简而言之,您无需为 MVC 应用程序链接到静态文件做任何事情。
您还可以在 IIS 中做一些小技巧。我将我的 js、图像、css 等存储在虚拟目录下的 Content 文件夹中。
如果您随后查看 Content 文件夹的属性(在 IIS 管理器中),请将其创建为虚拟目录,然后删除通配符映射。然后将 Content 文件夹设置回普通目录。这应该会停止对这些由 aspnet_isapi 处理程序处理的文件的请求。