2010-11-21 26 views
0

私はこの2つのルートを持っています。asp mvcルーティング問題

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

routes.MapRoute(
    "Paging", // Route name 
    "{controller}/{action}/p{currentPage}", 
    new { controller = "Home", action = "Index" }, 
    new { currentPage = "\\d+" }); 

このURLは最初のルートに行くのはなぜ私がこのコントローラー

public class MyController 
{ 
    public ActionResult All(int currentPage = 1) 
    { 
     // some code executed here 
     return View(pList); 
    } 
} 

は/マイ/すべて/ P5

誰かがルートについての良いチュートリアルに私を指すことができていますか?彼らが登録されているのと同じ順序で処理されているよう

答えて

3

ルートは、右の順に登録する必要があります。あなたの最初のルートは本質的にキャッチオールだから、/My/All/p5も一致します。最初にそのルートを登録します。

routes.MapRoute( 
    "Paging", // Route name 
    "{controller}/{action}/p{currentPage}", 
    new { controller = "Home", action = "Index" }, 
    new { currentPage = "\\d+" }); 

routes.MapRoute( 
    "Default", // Route name 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 
1

読書:スティーブン・サンダーソンは、第8章(You can find it here)で、彼の著書(プロMVC 2)におけるルーティングの非常に良い説明があり

帳から:

ルーティングのゴールデンルールが1つある場合、 これは具体的でないルートよりも具体的なルート エントリを置くことです。 はい、RouteCollectionは注文 リストであり、そしてあなたが ルートエントリを追加する順序は routematchingプロセスに重要です。

+0

あなたは説明を言い換えて質問者を助けることができますか? –

+0

どういう意味ですか?彼は良いチュートリアルを頼んだので、私はルーティングについて知る良い場所を指摘しました。 –

1

私はあなたがここで読むことができますルーティングのブログの記事のシリーズを持っている:あなたが考えるルートが一致している必要がありますなぜhttp://haacked.com/tags/Routing/default.aspx

はまた、ルートデバッガhttp://haacked.com/archive/2008/03/13/url-routing-debugger.aspxは、ルーティングで遊んと理解するのに有用なツールです一致しません。

ところで、Matthew Abbotは正しいです。ルートを並べ替える必要があります。スティーブン・サンダーソンの本のナザールの言葉には、それが当てはまる理由があります。ルーティングはルートをで評価し、最初のルートはを獲得します。

この状況をデバッグするための簡単な練習は次のとおりです。あなたの要求を見て:

/マイ/すべて/ P5

私は私のシステムで一度に各経路1を通過し、「それが一致でしょうか?」と尋ねるでしょう。答えが「はい」の最初のルートが一致するルートです。あなたの例では、ルートが最初のルートであることがわかります。これは、スティーブンがより特定のルートを最初に置いて一致するように提案する理由です。私は前に述べた

とルートデバッガはあなたのためにこの演習を行います。それはあなたに与えられた要求と合致するすべてのルートを示します。

関連する問題