如果我在我的ASP.NET MVC1(或2)Web应用程序中请求用于静态资源的Web应用程序,例如...图像或JavaScript文件或CSS文件...。如果请求与路由列表匹配...最终找不到控制器?

例如。

资源:/content/images/foo.png

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

有帮助吗?

解决方案

您可以选择是否映射现有文件 RouteCollection.RouteExistingFiles 财产

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

这是我从中读到的 这里:

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

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

其他提示

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

您也可以在IIS中做一个小技巧。我将JS,图像,CSS等存储在虚拟目录下方的内容文件夹中。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top