加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – ASP.NET MVC 3 – 自定义SEO友好路由

发布时间:2020-12-16 07:04:15 所属栏目:asp.Net 来源:网络整理
导读:我已经定义了以下路线: routes.MapRoute( null,"foo/{id}/{title}",new { controller = "Boo",action = "Details" }); 当我调用这个方法时: Url.Action("Details","Boo",new { id = article.Id,title = article.Title }) 我得到以下网址: http:// localh
我已经定义了以下路线:

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 /有些文字?

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

例如
HTTP://本地主机:57553 /富/ 1 /一些文本-S

规则:

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

任何帮助将不胜感激!

解决方法

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

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}",action = "Details" }
    )
);

现在你所要做的就是在我离开的SEOify功能中实现你的SEO要求.顺便说一句,你可以从StackOverflow does it的问题标题中获得一些灵感.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读