Как добавить «текстовый слаг» к URL-адресу страницы в MVC3? - PullRequest
3 голосов
/ 20 января 2012

Проверьте, что делает StackOverflow:

/5559276/c-logicheskii-vneshnii-metod-ne-budet-chitat

URL работает без финального декоратора, который в основном используется для целей SEO.

Я хочу что-то подобное в моем приложении ASP.Net MVC3.

Если в таблице Article у меня есть поле Slug nvarchar(1024) not null, как я могу вытолкнуть его из механизма маршрутизации, чтобы оно появлялось, когда кто-то посещает ссылку?

I хочу, чтобы идентификатор был виден, а ссылка работала даже без слага в конце. В случае, если я когда-нибудь изменю слаг в базе данных, все ссылки будут работать, так как идентификатор будет единственной ссылкой на статью.

Ясный, короткий пример был бы феноменальным.

Ответы [ 3 ]

7 голосов
/ 20 января 2012

Лучший способ сделать это - иметь вторую часть URL-адреса, слизняк, не относящимся к делу с точки зрения того, как выполняется поиск. Ваше определение маршрута будет примерно таким:

routes.MapRoute(
    "article"
    "articles/{id}/{slug}",
    new { controller = "Article", action = "Index", slug = "" }
);

И соответствующее действие:

public ActionResult Index(int id, string slug) {
    var article = _repository.GetById<Article>(id);

    ......

    return View();
}

Если вы беспокоитесь о людях, запрашивающих недопустимый слаг с действительным идентификатором (и влияние, которое это может оказать на SEO), то ваше действие контроллера может иметь дополнительную операцию, которая проверяет слаг против статьи и выполняет перенаправление 301 на нужный URL-адрес, если указан неправильный слаг. Кстати, именно это и делает StackOverflow. Если вы измените заголовочную часть URL-адреса вопроса, вы увидите, что сайт перенаправляет вас.

2 голосов
/ 20 января 2012

routes.MapRoute("Slugged", "{controller}/{action}/{id}/{slug}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });'

Затем для действия, которое обрабатывает ваш вызов, примите оба параметра: id и slug.

Затем я бы проверил, что предоставленный слаг соответствует слагу из фактической записи в базах данных, если это не так, 301 перенаправляет на правильный идентификатор и слаг (причина, по которой я это говорю, такова, что вы не получаете отмечен в SEO, если люди поймут, что ваши слизни могут быть изменены и ссылаются на вас разными способами)

0 голосов
/ 20 января 2012

сначала объявляют параметр маршрутизации "slug", затем передают его через значения маршрута при определении ссылки действия или URL действия.

...