2

これらに似た2つのルートが必要です。

routes.MapRoute("Detail", "guide/{urlname}", new { controller = "Application", action = "Detail" });
routes.MapRoute("Search", "guide/{keyword1}/{keyword2}", new { controller = "Guide", action = "Index", keyword1 = UrlParameter.Optional, keyword2 = UrlParameter.Optional });

したがって、1つのルートは、URL名に基づいてデータベース内のオブジェクトを検索する詳細ページであり、もう1つのルートは、アプリケーションで生成されたキーワードに基づく検索結果ページであり、どちらも同じURLルート(/guide)を共有します。2つのアクションは異なるコントローラーにあります。可能なURLは次のとおりです。

/guide/evernote        --> should route to the application detail page
/guide                 --> should route to search results without filter
/guide/iphone          --> should route to iphone apps search results
/guide/iphone/medical  --> should route to medical iphone apps search results

明らかに、このよう/guide/iphoneに、最初のルートはすでに同じURLに一致しているため、2番目のルートがURLに一致することはありません。

コントローラがデータベースでオブジェクトを見つけられない場合、最初のアクションでリダイレクトを実行したくありません。では、他にどのような選択肢がありますか?カスタムを作成する必要がありますか、RouteHandlerそれともUrlRoutingModuleこのために作成する必要がありますか、それとももっと簡単な方法がありますか?

4

2 に答える 2

1

{urlname} が意味するような URL の場合、制約を追加して、URL が正規表現に一致するかどうかをテストできます。

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs

于 2013-01-15T15:16:47.140 に答える
0

順序を変更すると機能します。

routes.MapRoute("Search", "guide/{keyword1}/{keyword2}", new { controller = "Guide", action = "Index" });
routes.MapRoute("Detail", "guide/{urlname}", new { controller = "Application", action = "Detail" });
于 2013-01-15T14:50:38.207 に答える