我想忽略多个通配符路由。在 asp.net mvc 预览版 4 中,它们附带:

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

我还想添加一些内容,例如:

RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}");

但这似乎破坏了我的程序中生成网址的一些帮助程序。想法?

有帮助吗?

解决方案

这里有两种可能的解决方案。

  1. 向忽略路由添加约束,以确保只有应忽略的请求才会与该路由匹配。有点笨拙,但应该可以。

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"});
    
  2. 您的内容目录中有什么?默认情况下,路由不会路由磁盘上存在的文件(实际上检查 VirtualPathProvider)。因此,如果您将静态内容放入 Content 目录中,则可能不需要忽略路由。

其他提示

这可能非常棘手。

当试图弄清楚如何将路线数据映射到路线中时,系统当前会自上而下地搜索,直到找到提供所有所需信息的内容,然后将其他所有内容填充到查询参数中。

由于路线“Content/{*pathInfo}”所需的信息始终完全满足(该路线中根本没有必需的数据),并且它位于路线列表的顶部附近,因此您映射到未命名路线的所有尝试都将匹配此模式,您的所有 URL 都将基于此 ("Content?action=foo&controller=bar")

不幸的是,没有办法通过行动路线来解决这个问题。如果您使用命名路由(例如,选择 Html.RouteLink 而不是 Html.ActionLink),则可以指定要匹配的路由的名称。它不太方便,但更精确。

IMO,复杂的路线使得行动路线系统基本上崩溃。在我拥有默认路由以外的其他内容的应用程序中,我几乎总是最终恢复到基于命名路由的 URL 生成,以确保我始终获得正确的路由。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top