我已经定义了以下路线:
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.
非常感谢任何帮助!
答案 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的方式中获得灵感。