ASP.NET MVC コントローラーがいくつかあります。これらの多くは、1 つ以上の必要な値 (id など) を取ります。これらの値は必須であるため、クエリ文字列引数ではなく、URL パスの一部にしたいと考えています。例えば:
// route should be MyController/Action1/[someKindOfId1]
public ActionResult Action1(int someKindOfId1) { ... }
// less commonly:
// route should be MyController/Action1/[someKindOfId2]/[someKindOfId3]
public ActionResult Action2(int someKindOfId2, int someOtherKindOfId3) { ... }
手動で各ルートをリストすることなく、これらのルートをマップする方法を探しています。たとえば、私は現在次のことを行っています。
routes.MapRoute(
"Action1Route",
"MyController/Action1/{someKindOfId1}",
new { controller = "MyController", action = "Action1" }
);
私が考えたいくつかの方法: * デフォルトの {controller}/{action}/{id} ルートを使用し、パラメーターの名前を id に変更するか、[Bind] 属性を使用してそれらをバインドできるようにします (これが機能するかどうかはわかりません)。わかりやすい名前を付けながら、id ルート値に追加します。これでも、共通のコントローラー/アクション ベース URL に制限されます (悪くはありませんが、URL を現在のコード構成に結び付けるため、最も柔軟というわけでもありません)。* ルートを構成するアクション メソッドに配置できる属性を作成します。その後、すべてのコントローラーを反映して、アプリケーションの開始時にルートを構成できます。
これを行うためのベストプラクティス/組み込みのアプローチはありますか?