1

我正在阅读 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。那样对我不起作用。

这是正在发生的事情:

  1. 我运行应用程序并在 IE 中打开 URLhttp://localhost:50483/Content/StaticContent.htm并被重新路由到 /Home/Content
  2. http://localhost:50483/Content/StaticContent.htm然后我在 Chrome 中打开 URL并显示 StaticContent.htm 的原始内容
  3. 然后我更改为 IE 并按Ctrl-R(刷新)或在 url 栏中选择 URL,然后按Enter并被路由到 StaticContent.htm 的原始内容(为什么?
  4. 如果我按Ctrl-F5,那么,我将被重新路由到 /Home/Content ( wut? )

路由不应该将尝试访问 Content/StaticContent.htm 的 IE 用户始终发送到 /Home/Content 吗?

PS:我重新启动了 Visual Studio 并删除了 IE 上的浏览​​器历史记录,但问题仍然存在

UserAgentConstraint.cs
Global.asax.cs 中的 RegisterRoutes 方法

4

1 回答 1

1

它可能正在被缓存

即使内容没有改变,Ctrl+F5 也会要求服务器重新加载。

听起来这是正确的行为。

首次重新加载后通过更改 static.html 来验证。然后 Ctrl+R 重新加载。它应该击中动作方法。

于 2013-04-02T15:43:35.993 回答