关于c#:Asp.Net路由:如何忽略多个通配符路由?

关于c#:Asp.Net路由:如何忽略多个通配符路由?

Asp.Net Routing: How do I ignore multiple wildcard routes?

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

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

我还想添加如下内容:

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

但这似乎破坏了一些在我的程序中生成url的助手。 有什么想法吗?


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

  • 向忽略路由添加约束,以确保仅应忽略的请求将与该路由匹配。有点麻烦,但应该可以。

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


  • 这可能非常棘手。

    当试图找出如何将路线数据映射到路线时,系统当前从上至下搜索,直到找到可以提供所有必需信息的地方,然后将其他所有内容填充到查询参数中。

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

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

    国际海事组织,复杂的路线使行动路由系统基本上崩溃了。在应用程序中,除了默认路由以外,我几乎总是返回到基于命名路由的URL生成,以确保始终获得正确的路由。


    推荐阅读