所以我在 IIS 7 下运行的 MVC 3 应用程序中有一条这样的路线:
routes.MapRoute(
"VirtualTourConfig",
"virtualtour/config.xml",
new { controller = "VirtualTour", action = "Config" }
);
诀窍在于 /virtualtour/config.xml 中实际上存在一个文件。看起来请求只是返回该位置的 xml 文件,而不是命中路由,该路由会处理 XML、进行一些更改并返回自定义 XmlResult。
如果文件存在于磁盘上,关于如何告诉我的应用程序命中路由而不是实际文件,有什么建议吗?
EDIT:看来我可以使用routes.RouteExistingFiles = true;
在 Global.asax 的 RegisterRoutes 方法中告诉应用程序忽略磁盘上的文件。然而,这会全局设置该标志并破坏应用程序内的许多其他请求。例如,我仍然希望调用 /assets/css/site.css 来返回 CSS 文件,而不必为每个静态资源专门设置路由。所以现在的问题是,有没有办法在每条路线的基础上做到这一点?
到目前为止,我发现的最佳答案是全球应用routes.RouteExistingFiles=true
然后选择性地忽略我想要传递到现有文件(如 .js、.css 等)的路由。所以我最终得到了这样的结果:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("*.js|css|swf");
routes.RouteExistingFiles = true;
routes.MapRoute(
"VirtualTourConfig",
"virtualtour/config.xml",
new { controller = "VirtualTour", action = "Config" }
);
}
如果有人有更好的解决方案,我想看看。我更喜欢有选择地将“RouteExistingFIles”标志应用于各个路由,但我不知道是否有办法做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)