9

私が最近抱えていると思われる大きなハードルの1つは、私が開発しているいくつかのMVCベースのアプリケーションのより複雑なルーティング要件のいくつかに頭を悩ませることです。完全な理解を得るためにチュートリアルを順を追って説明するための適切なチュートリアルのセットを見つけるのに問題があります。

私が見つけたいのは、基本(コントローラー/アクション/ ID)から高度なものまでルーティングするすべてのチュートリアルの完全なセットです。

私が高度なルーティングと呼んでいるものの例は、次のようなものです。

/blog/year/month/day/title-コントローラーにマップします:blogおよびアクション:postおよびパラメーターとして:year、、およびmonthdaytitle

/blog/title-コントローラーにマップします:blogおよびアクション:postおよびパラメーターとして:title

/title-コントローラーにマップします:blogおよびアクション:postおよびパラメーターとして:title

データベースを使用して、可能な各セットをグローバルの明示的なルートにマップすることはできますが、ルーティングエンジンのルートを正しい場所に配置するという点を打ち負かしているようです。ルールを一度定義したいと思います。

4

1 に答える 1

17

わかりません。必要に応じて正規表現を使用して、それぞれを個別のルートとして定義できないのはなぜですか。たとえば、とを区別/blog/year/month/day/title/blog/titleます。

これらのセットはそれぞれ個別のケースであり、MVCにそれぞれをどうするかを指示する必要があります。あなたはdefining the rule onceファイルでこれを行うことができGlobal.asax.csます:

最初のケースの場合:/blog/year/month/day/title

routes.MapRoute(
    "Blog Full Route", // Route name
    "blog/{year}/{month}/{day}/{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    new {year = @"\d+", month= @"\d+", day = @"\d+"} // Constrain parameters with RegEx patterns
    );

2番目のケースの場合:/blog/title

routes.MapRoute(
    "Blog Title Route", // Route name
    "blog/{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    );

最後の場合:/title

routes.MapRoute(
    "Title Route", // Route name
    "{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    );

秘訣は、これらのルートをこの正確な順序で配置し、最も具体的でないものを一番下に配置することです。順序を変更すると、間違ったルートが使用されることになります(特に最後の2つ)。最後のケースが2番目のケースに切り替えられた場合、そのタイプのURLは、タイトルとしてアクションにblog/SomeTitleルーティングされます。postblog

何かのルートを作成するときは、次の点に注意してください。

  1. RegExを使用したルートパラメータの制約
  2. veryルートの順序に注意してください(どのルートがどのルートの前に来るか)
  3. 波括弧{something}はアクションパラメータを示します

いくつかの良いチュートリアル:

于 2010-02-26T14:25:23.683 に答える