ASP.NET MVC 3 - Пользовательские SEO дружественные маршруты - PullRequest
5 голосов
/ 12 декабря 2011

Я определил следующий маршрут:

routes.MapRoute(
    null,
    "foo/{id}/{title}",
    new { controller = "Boo", action = "Details" }
);

Когда я вызываю этот метод:

Url.Action("Details", "Boo", new { id = article.Id, title = article.Title })

, я получаю следующий URL:
http://localhost:57553/foo/1/Some%20text%20Š

Я хотел бы создать новый маршрут, который будет содержать строчные буквы для всех символов и заменяет некоторые из них.

например,
http://localhost:57553/foo/1/some-text-s

Правила:

Uppercase -> lowercase    
' ' -> '-'
'Š' -> 's'
etc.

Любая помощь будет принята с благодарностью!

1 Ответ

6 голосов
/ 12 декабря 2011

Похоже, идеальный кандидат для пользовательского маршрута:

public class MyRoute : Route
{
    public MyRoute(string url, object defaultValues)
        : base(url, new RouteValueDictionary(defaultValues), new MvcRouteHandler())
    {
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        values = new RouteValueDictionary(values);
        var title = values["title"] as string;
        if (!string.IsNullOrEmpty(title))
        {
            values["title"] = SEOify(title);
        }
        return base.GetVirtualPath(requestContext, values);
    }

    private string SEOify(string title)
    {
        throw new NotImplementedException();
    }
}

которое будет зарегистрировано так:

routes.Add(
    "myRoute",
    new MyRoute(
        "foo/{id}/{title}",
        new { controller = "Boo", action = "Details" }
    )
);

Теперь все, что вам нужно сделать, это реализовать ваши требования SEO в функции SEOify, которую я оставил. Кстати, вы можете получить вдохновение от того, как StackOverflow делает это для заголовков вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...