rout.Add (Routes.MEMBERS_PROFILE.Text (), новый маршрут ("members / profile / {userid} / {userfullname}", новый PVRouteHandler ("/ member / profile.aspx")));
вы просмотрите URL-адрес SO-вопроса, то увидите, что ID и «SLUG» передаются в контроллер вопросов:https://stackoverflow.com/questions/676934/what-do-you-need-to-write-your-own-blog-engine, Что мне кажется интересным, так это то, что вы можете изменить часть URL «SLUG», не влияя на способность приложения перенаправлять запроспример, Единственный способ, с помощью которого я мог бы это осуществить, - это иметь маршрут, который принял id и «SLUG» и использовал ограничение маршрута для слага, чтобы убедиться, что он следует шаблону. Мне пришлось использовать ограничение, чтобы две переменные не привели к тому, что этот маршрут соответствовал всем запросам. У кого-нибудь есть лучший способ сделать это или есть примеры более сложных сценариев маршрутизации?
Сложение:Я понимаю, что SLUG предназначен для удобства чтения, и я хотел бы продублировать эту функцию в другом приложении. Каков наилучший способ сделать это.
Маршрут:routes.MapRoute(
"Id + Slug", // Route name
"Test/{id}/{slug}", // URL with parameters
new // Parameter defaults
{
controller = "Test",
action = "Details",
id = "",
slug = ""
},
new { slug = new SlugConstraint() }
);
Простое ограничение:public class SlugConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
string value = values[parameterName].ToString();
return value.Contains("-");
}
}