Я понимаю, что это довольно старый вопрос, но для меня это только половина истории принятия URL-адресов с дефисами в них, другая половина генерирует эти URL-адреса, все еще имея возможность использовать Html.ActionLink и другие помощники в MVC Framework, я решил эту проблему, создав аналогичный пользовательский класс маршрутов, вот код на случай, если он поможет кому-либо прийти сюда из поиска Google. Сюда также входит нижний регистр URL.
public class SeoFriendlyRoute : Route
{
// constructor overrides from Route go here, there is 4 of them
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
var path = base.GetVirtualPath(requestContext, values);
if (path != null)
{
var indexes = new List<int>();
var charArray = path.VirtualPath.Split('?')[0].ToCharArray();
for (int index = 0; index < charArray.Length; index++)
{
var c = charArray[index];
if (index > 0 && char.IsUpper(c) && charArray[index - 1] != '/')
indexes.Add(index);
}
indexes.Reverse();
indexes.Remove(0);
foreach (var index in indexes)
path.VirtualPath = path.VirtualPath.Insert(index, "-");
path.VirtualPath = path.VirtualPath.ToLowerInvariant();
}
return path;
}
}
затем при добавлении маршрутов вы можете либо создать расширения RouteCollection, либо просто использовать следующее в ваших глобальных объявлениях маршрутизации
routes.Add(
new SeoFriendlyRoute("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Default", action = "Index", id = "" }),
new HyphenatedRouteHandler())
);