ASP.NET MVC路由和静态数据(即图像,脚本等)
-
30-09-2019 - |
题
如果我在我的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处理程序处理的这些文件的请求。