ASP.NET MVC 3 - 自定义SEO友好路线

时间:2011-12-12 16:08:05

标签: asp.net-mvc-2 routes

我已经定义了以下路线:

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

当我称这种方法时:

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

我得到以下网址:
http://localhost:57553/foo/1/Some%20text%20Š

我想创建一个新的路由,它将小写所有字符并替换其中一些字符。

e.g。
http://localhost:57553/foo/1/some-text-s

规则:

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:6)

似乎是自定义路线的完美候选者:

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" }
    )
);

现在您所要做的就是在我离开的SEOify函数中实现您的SEO要求。顺便说一下,你可以从问题标题StackOverflow does it的方式中获得灵感。