Как в общем случае реализовать перезапись URL в методе MapRoute?
Я пытаюсь переписать URLs из C # 'Паскаль-кейс в SEO-дружественном формате.
Например, я хочу что-то вроде/User/Home/MyJumbledPageName
выглядеть так:
/user/home/my-jumbled-page-name // lower-case, and words separated by dashes
Вот мой метод для преобразования каждого "лексема» в URL:
public static string GetSEOFriendlyToken(string token)
{
StringBuilder str = new StringBuilder();
for (int i = 0, len = token.Length; i < len; i++)
{
if (i == 0)
{
// setting the first capital char to lower-case:
str.Append(Char.ToLower(token[i]));
}
else if (Char.IsUpper(token[i]))
{
// setting any other capital char to lower-case, preceded by a dash:
str.Append("-" + Char.ToLower(token[i]));
}
else
{
str.Append(token[i]);
}
}
return str.ToString();
}
... и по моемуRouteConfig.cs
файл в корне, я сопоставил эти маршруты:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// without this the first URL is blank:
routes.MapRoute(
name: "Default_Home",
url: "index", // hard-coded?? it works...
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Home",
// the method calls here do not seem to have any effect:
url: GetSEOFriendlyToken("{action}") + "/" + GetSEOFriendlyToken("{id}"),
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
С этим кодом, URL, такой как/AboutTheAuthor
являетсяне преобразуется в то, что я хочу, что бы./about-the-author
Кажется, что мой вызов метода игнорируется, чтоздесь происходит? И что'Это обычный способ реализовать это?