Для сценария у меня есть приложение ASP.NET MVC с URL-адресами, которые выглядят следующим образом:
http://example.com/Customer/List
http://example.com/Customer/List/Page/2
http://example.com/Customer/List
http://example.com/Customer/View/8372
http://example.com/Customer/Search/foo/Page/5
Эти URL-адреса достигаются с помощью следующих маршрутов в Global.asax.cs
routes.MapRoute(
"CustomerSearch"
, "Customer/Search/{query}/Page/{page}"
, new { controller = "Customer", action = "Search" }
);
routes.MapRoute(
"CustomerGeneric"
, "Customer/{action}/{id}/Page/{page}"
, new { controller = "Customer" }
);
//-- Default Route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Customer", action = "Index", id = "" }
);
Все прошло хорошо, пока не появилось новое требование и не хочет отбрасывать ключевое слово "Клиент" с URL-адреса, чтобы URL выглядел следующим образом:
http://example.com/List
http://example.com/List/Page/2
http://example.com/List
http://example.com/View/8372
http://example.com/Search/foo/Page/5
Изменить: исправленные примеры ссылок, благодаря @haacked.
Я попытался добавить новый MapRoutes
, чтобы принять только {action}
и установить контроллер по умолчанию для клиента. например, /
routes.MapRoute(
"CustomerFoo"
, "{action}"
, new { controller = "Customer", action = "Index" }
);
Кажется, что это работает, однако теперь все ссылки, созданные Html.ActionLink(), являются странными и больше не являются дружественными URL.
Итак, это достижимо? Я приближаюсь в правильном направлении?