2008-08-27 2 views
10

複数のワイルドカードルートを無視したいと思います。 asp.net MVCプレビュー4で、彼らが同梱さ:Asp.Netルーティング:複数のワイルドカードルートを無視するにはどうすればよいですか?

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

私も同じようなものを追加したい:

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

が、それは私の中でURLを生成ヘルパーの一部を破るように見えますプログラム。思考?

答えて

13

ここには2つの解決策があります。

  1. ignore routeに制約を追加して、無視する必要がある要求のみがそのルートと一致することを確認します。 Kinda kludgy、しかしそれは動作するはずです。

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

5

これはかなり難しいことがあります。

ルートデータをルートにマップする方法を見つけようとするとき、システムは現在、必要なすべての情報が提供されている場所が見つかるまでトップダウンを検索し、それ以外はすべてクエリパラメータに入れます。

"Content/{* pathInfo}"の必須情報は常に完全に満たされているため(このルートでは必須のデータはありません)、ルートリストの最上部付近にあります。 ( "Content?action = foo &コントローラー= bar")

残念ながら、アクションルートではこれを回避する方法はありません。名前付きルートを使用する場合(f.e.、Html.ActionLinkではなくHtml.RouteLinkを選択)、一致するルートの名前を指定できます。あまり便利ではありませんが、より正確です。

IMO、複雑なルートは、アクションルーティングシステムを基本的に転倒させます。既定のルート以外のものがあるアプリケーションでは、名前付きルートベースのURL生成に戻ってほとんどいつも正しいルートが得られるようになります。

関連する問題