Создание URL-адресов, удобных для поисковых систем, в ASP.NET MVC

Я хотел бы разработать URL-адреса, которые выглядят следующим образом:

http://mysite.com/products/1/best-product-in-the-world

Где все, что мне нужно, чтобы добраться до правильной записи, - это следующий маршрут:

http://mysite.com/products/1

Когда я добавляю часть описания продукта в URL («лучший продукт в мире»), я получаю проблемы с кодировкой URL. Я пытался использовать Server.UrlEncode при построении этой части моего URL-адреса в ActionLink(...):

<%= Html.ActionLink(item.Subject, "../Post/Detail", 
    new { id = item.ID, 
          descriptiveUrl = Server.UrlEncode(Product.ShortDescription) }, 
    new { rel = "canonical", 
          title = Product.ShortDescription, 
          @class = "product-hyperlink" })%>

Но это отображает регулярно закодированные элементы для специальных символов и пробелов, как показано ниже:

http://localhost:2392/Products/Detail/1/best+product+in+the+world253f

... который создает исключение 400, неверный запрос. Не уверен, что правильно ответил на вопрос, но при необходимости могу дать дополнительные разъяснения.

Обновление: URL этого сообщения выглядит следующим образом, и я пытаюсь сделать что-то очень похожее!

http://stackoverflow.com/questions/1148955/creating-search-engine-friendly-urls-in-asp-net-mvc

person jn29098    schedule 19.07.2009    source источник


Ответы (3)


Простым вариантом было бы добавить свойство к объекту вашей модели с помощью метода доступа, который нормализует соответствующее поле (в данном случае краткое описание) до подходящего «слага»; то есть бит нежелательного текста после идентификатора. Затем вы используете это при построении URI.

Процесс нормализации может быть таким же простым, как удаление всех символов, отличных от буквенно-цифровых, и замена пробелов дефисами.

person Rob    schedule 19.07.2009
comment
Я думаю, вы правы. Вот еще одно сообщение, в котором задается тот же вопрос (заголовок stackoverflow.com/questions/217960/). Думаю, я хочу убедиться, что я создаю безопасный URL-адрес. - person jn29098; 19.07.2009

В более глубоком поиске в Google я нашел следующую ссылку для создания слагов:

http://www.intrepidstudios.com/blog/2009/2/10/function-to-generate-a-url-friendly-string.aspx

Спасибо @Rob и @Coding the Wheel за предоставленную мне терминологию, которая мне действительно понадобилась, чтобы найти этот ответ!

person jn29098    schedule 19.07.2009

Стандартной практикой здесь является сохранение «слага» с каждым сообщением, которое будет функционировать как внешний URL-адрес сообщения. Например, ваш слаг для поста выше будет таким:

best-product-in-the-world

Приличная CMS сделает это за вас автоматически и позволит настроить слаг перед сохранением.

person Community    schedule 19.07.2009
comment
Так что я не использую CMS. Знакомы ли вы с какими-либо библиотеками или фрагментами, которые обрабатывают все возможные варианты символов и проблемы для создания начального значения slug? - person jn29098; 19.07.2009