Ну, для начала, эта строка id1 = "" будет проблематичной, потому что вы не можете сделать что-то необязательное, что не в конце.
Я только что попробовал это в моей системе, и она работает просто отлично.
Это маршрут:
routes.MapRoute(
"shelf-route",
"shelves/{id1}/products/{action}/{id2}",
new { controller = "Products", action = "List", id2 = "" }
);
Это контроллер:
public class ProductsController : Controller
{
public string List(string id1, string id2)
{
return String.Format("ID1 = {0}, ID2 = {1}", id1, id2);
}
}
Я пробовал URL-адреса, такие как:
http://localhost:14314/shelves/23/products/list/14
http://localhost:14314/shelves/23/products
И они работали просто отлично.
Когда вы попробовали URL-адрес с надписью «изменить», вы не забыли сделать действие «Изменить»? Если нет действия Edit, вы получите 404.