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("-");
    }
}

Ответы на вопрос(4)

Ваш ответ на вопрос