Я бы порекомендовал, чтобы ваш URL был
http://localhost:1985/Materials/Details/2/Steel
Похоже, что SO также отображает их URL.
Ваши маршруты будут определены как
routes.MapRoute(
"action with slug",
"{controller}/{action}/{id}/{slug}",
new {controller = "Error", action = "NotFound", id = "", slug = ""}
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Materials", action = "Index", id = "" }
);
В ответе на второй вопрос в комментариях "Как удалить детали из ссылки?"Если вы хотите удалить имя ACTION, то есть URL-адрес просто http://site/controler/id/slug
, добавьте следующий маршрут ПЕРЕД действием с маршрутом slug.
routes.MapRoute(
"controller with slug",
"Materials/{id}/{slug}",
new {controller = "Materials", action = "Details", id = "", slug = ""}
);
«Плагин», который будет захватывать слово steel, будетдействие будет проигнорировано, потому что вы все равно хотите, чтобы идентификатор получал материал в любом случае.
Создайте ссылку на маршрут вместо ссылки на действие, например:
<%= Html.RouteLink(material.Name,
"show with slug",
new { controller = "Materials",
action = "Details",
id = material.Id,
slug = Server.HtmlDecode(material.Name).Replace(" ","-")
})
%>
Я заменяю пробелы в своем'slug с дефисами, поэтому браузер не заменяет их на% 20.
Ваши данные ActionResult останутся прежними.