ASP中的自定义路由约束问题.净MVC

本文关键字:问题 MVC 约束 路由 自定义 ASP | 更新日期: 2023-09-27 18:06:57

我正在浏览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中打开URL http://localhost:50483/Content/StaticContent.htm,并被重新路由到/Home/Content
  2. 然后我在Chrome中打开URL http://localhost:50483/Content/StaticContent.htm,并显示StaticContent.htm
  3. 的原始内容
  4. 然后切换到IE并按Ctrl-R(刷新)或在URL栏中选择URL并按Enter并路由到StaticContent.htm的原始内容(为什么?)
  5. 如果我按Ctrl-F5,然后,我被重新路由到/Home/Content (wut?)

是不是路由应该发送IE用户,谁试图访问Content/StaticContent.htm,总是到/Home/Content?

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

UserAgentConstraint.cs
在Global.asax.cs

ASP中的自定义路由约束问题.净MVC

可能正在缓存

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

听起来这是正确的行为。

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