2

我想改变:

www.testurl.com/sports/blog/1 

体育是我的领域,博客是我的行动,1 是博文的 ID,用于:

www.testurl.com/sports/blog/test-title-of-blog

博客仍然是我的操作,但未显示 id,而是博客的标题/永久链接。

这是我针对此操作的 AreaRegistration:

context.MapRoute(
                "sports",
                "sports/{action}/{content}",
                new { area = "Sports", controller = "Sports", action = "", content = "" });

这是我目前的行动:

[HttpGet]
    public ActionResult Blog(string content)
    {
            int contentId;
            if (Int32.TryParse(content, out contentId))
            {
                model = service.GetBlogById(contentId);
            }
            else
            {
                model = service.GetBlogByTitle(content);
            }

            //Change URL to be: www.testurl.com/sports/blog/ + model.SEOFriendlyTitle
            return View(model);            
    }

用户可以通过博客的 ID 进行搜索,也可以通过标题进行搜索,但我只希望标题出现在 url 栏中,而不是 id。

由于会导致持续维护,我无法通过重定向规则执行此操作。

  1. 控制器是执行此操作的正确位置吗? -请记住,在我使用 ID 从数据库中检索到头衔之前,我可能没有头衔

  2. 我将如何更改 URL 以显示标题与 ID?

4

2 回答 2

2

我认为如果 ID 是数字并且是有效的 contentId ,您应该将 RedirectResult 返回到新的 Url :

            int contentId;
            if (Int32.TryParse(content, out contentId))
            {
                model = service.GetBlogById(contentId);
                if(model != null)
                {
                    return RedirectResult(/*url using the title*/);
                }
            }
            else
            {
                model = service.GetBlogByTitle(content);
            }

            //Change URL to be: www.testurl.com/sports/blog/ + model.SEOFriendlyTitle
            return View(model);

当然,这将导致服务器再次往返,但我可以看到一种无需页面重定向即可更改浏览器 URL 的方法。您还应该确保您网站上所有发布的 url 都使用标题而不是 ID。

我希望它会有所帮助。

于 2012-11-26T17:49:14.243 回答
0

我建议快速阅读一下。

http://www.domincpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

如果您真的不能在 Url 中拥有 ID 并且不想进行重定向,那么我认为将 Url 作为 Slugs 存储在数据库中是唯一的其他选择。

*如果您要这样做,请注意几点。*

  1. 在数据库级别向列添加唯一约束以避免重复。

  2. 在此列上创建数据库索引以加快读取速度。

所以有了这个网址

www.testurl.com/sports/blog/test-title-of-blog

这是您将查询数据库而不是 ID 的唯一 slug

test-title-of-blog
于 2012-11-26T17:17:39.657 回答