我正在阅读 Pro ASP.NET MVC 3 书中的“磁盘文件的路由请求”部分,并且遇到了一些与自定义路由约束相关的奇怪问题。
我创建了一条自定义路线:
//82:1. this is added so that below routes are checked first before checking the disk files.
routes.RouteExistingFiles = true;
//82:2 the custom route which maps requests to Static/StaticContent.htm to route /Home/Content, only from IE.
routes.MapRoute("DiskFile", "Content/StaticContent.htm",
new { controller = "Home", action = "Content" },
new {customConstraint = new UserAgentConstraint("IE")},
new[] { "UrlsAndRoutes.Controllers" });
书上说这个路由会让 IE 用户查看 Home/Content 路由,非 IE 用户直接查看 Content/StaticContent.htm。那样对我不起作用。
这是正在发生的事情:
- 我运行应用程序并在 IE 中打开 URL
http://localhost:50483/Content/StaticContent.htm
并被重新路由到 /Home/Content http://localhost:50483/Content/StaticContent.htm
然后我在 Chrome 中打开 URL并显示 StaticContent.htm 的原始内容- 然后我更改为 IE 并按
Ctrl-R
(刷新)或在 url 栏中选择 URL,然后按Enter
并被路由到 StaticContent.htm 的原始内容(为什么?) - 如果我按
Ctrl-F5
,那么,我将被重新路由到 /Home/Content ( wut? )
路由不应该将尝试访问 Content/StaticContent.htm 的 IE 用户始终发送到 /Home/Content 吗?
PS:我重新启动了 Visual Studio 并删除了 IE 上的浏览器历史记录,但问题仍然存在。