「Customers」という領域を持つ ASP.Net アプリケーションがあります。この領域には、Index という 1 つのメソッドを持つ同じ名前のコントローラーがあります。
次のルートが定義されています。
context.MapRoute(null,
"Customers/{controller}/{action}",
new { controller = "customers", action = "Index" }
);
これにより、次の URL を使用して Customers コントローラーの index メソッドに移動できます。
マイドメイン/顧客
私の顧客エリアには、製品と呼ばれる別のコントローラーもあります。これには、製品エンティティ (現時点ではほとんどが Visual Studio によって自動生成されます) を操作できるようにするいくつかのメソッドがあります。
現在のルートでは、次のような URL を使用して製品コントローラーに移動できます。
MyDomain/Customers/Products (製品コントローラーのインデックス ページを表示) MyDomain/Customers/Products/Create (新しい製品を追加するページを表示)。MyDomain/Customers/Products/Details?id=1234 (ID が 1234 の製品を表示)
今私ができるようにしたいのは、次のようなはるかにユーザーフレンドリーな URL を使用して詳細ページに移動することです。
MyDomain/顧客/製品/1234
次のような新しいルートを定義しました。
context.MapRoute(null,
"Customers/Products/{id}",
new { controller = "Products", action = "Details" }
);
ルートは、私が示した最初のルートの前に定義されています。これにより、必要に応じて製品ページに移動できますが、製品コントローラーの他のメソッドに移動できなくなりました。
EG下記URL
MyDomain/Customers/Products/Create
次のエラーが表示されます。
パラメーター ディクショナリには、メソッド 'System.Web.Mvc.ViewResult Details(Int32)' の null 非許容型 'System.Int32' のパラメーター 'id' の null エントリが含まれています。
ルートの順序を変更すると、製品コントローラーのすべてのメソッドに移動できますが、詳細 URL はクエリ パラメーターを持つ古い形式に戻ります。
ルートを次のように更新すると:
context.MapRoute(null,
"Customers/Products/{id}",
new { controller = "Products", action = "Details", id = UrlParameter.Optional }
);
その後、私はまだ同じ問題を抱えています。
希望する結果を得るためにルートを構築する方法を誰か教えてもらえますか? 要約すれば:
- Customers エリアに移動する場合、URL を「MyDomain/Customers」のようにしたい
- 製品の詳細ページに移動する場合、URL を「MyDomain/Customers/Products/1234」のようにしたいと考えています。
- 他の製品ページに移動する場合、URL を「MyDomain/Customers/Products/Create」のようにしたい