Я пишу веб-сайт на MVC 4 и хотел бы частично продублировать стиль Stack Exchange для вопросов маршрутизации. Например:
stackoverflow.com/questions/15191392 и
stackoverflow.com/questions/15191392/not-the-real-title и
stackoverflow.com/questions/15191392/can-i-avoid-this-redirect-to-fix-or-add-a- слизняк
все направляют к одному и тому же вопросу и исправляют URL. Я бы хотел, чтобы слаг всегда присутствовал и исправлялся, даже если он не нужен для маршрутизации.
Это моя текущая реализация:
routes.MapRoute("Item", "{id}/{slug}/{action}",
new {controller = "Item", action = "Index", slug = UrlParameter.Optional},
new { id = @"\d+", slug = @"(?-i)[-a-z]*", action = @"(?-i)(|[A-Z][a-zA-Z]*)" });
routes.MapRoute("Default", "{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional});
In ItemController.cs
:
public ActionResult Index(int id, string slug = null)
{
var item = GetItem(id);
var itemSlug = ToSlug(item.Title);
if (slug != itemSlug)
{
return RedirectToActionPermanent("Index", new {id, slug = itemSlug});
}
return View(item);
}
Меня беспокоит перенаправление, если слаг неправильный / отсутствует. Эта реализация может потребовать вдвое больше работы (запрос элемента по идентификатору и вставка заголовка), чем необходимо для преобразования в представление. Что еще хуже, мне нужно дублировать код перенаправления для каждого из моих действий.
Есть ли лучшая реализация, которую я могу использовать в отношении дублирования кода, производительности и воздействия на SEO?