12

複数のワイルドカード ルートを無視したい。asp.net mvc preview 4 では、以下が同梱されています。

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

また、次のようなものを追加したいと思います。

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

しかし、それは私のプログラムでURLを生成するヘルパーのいくつかを壊しているようです. 考え?

4

2 に答える 2

15

ここで考えられる解決策は 2 つあります。

  1. 無視する必要があるリクエストのみがそのルートに一致するように、無視ルートに制約を追加します。ちょっと不器用ですが、うまくいくはずです。

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"});
    
  2. コンテンツ ディレクトリには何がありますか? デフォルトでは、Routing はディスク上に存在するファイルをルーティングしません (実際には VirtualPathProvider をチェックします)。そのため、コンテンツ ディレクトリに静的コンテンツを配置する場合は、無視ルートは必要ない場合があります。

于 2008-08-27T16:07:54.293 に答える
5

This can be quite tricky.

When attempting to figure out how to map route data into a route, the system currently searches top-down until it finds something where all the required information is provided, and then stuffs everything else into query parameters.

Since the required information for the route "Content/{*pathInfo}" is entirely satisfied always (no required data at all in this route), and it's near the top of the route list, then all your attempts to map to unnamed routes will match this pattern, and all your URLs will be based on this ("Content?action=foo&controller=bar")

Unfortunately, there's no way around this with action routes. If you use named routes (f.e., choosing Html.RouteLink instead of Html.ActionLink), then you can specify the name of the route to match. It's less convenient, but more precise.

IMO, complex routes make the action-routing system basically fall over. In applications where I have something other than the default routes, I almost always end up reverting to named-route based URL generation to ensure I'm always getting the right route.

于 2008-08-27T14:54:33.687 に答える