在ASP.NET MVC 4中将URL中的ID参数别名为字符串

时间:2012-09-29 02:45:43

标签: asp.net-mvc-3 asp.net-mvc-routing

我要做的是重写URL以使它们更加友好,但我仍然希望将参数作为int ID传递。

例如,指向新闻文章的网址可能如下所示: “www.domain.com/category-id/article-id”或“domain.com/5/3”

我想要做的是在任何地方重写URL,以便将类别的标题和文章的标题写入URL,使其成为f.x. “domain.com/politics/some-title”但我仍然希望将文章的ID作为参数传递给控制器​​操作。这对于该类别来说不那么重要,但这是我想用文章ID做的事情,因为它是唯一的,但标题可能不是。

我已经检查了属性路由并查看了一些路由指南和问题,但没有找到任何可以让我实现此功能的东西。我刚刚开始使用ASP.NET MVC,所以我无法查看任何过于先进的内容。

提前致谢。

2 个答案:

答案 0 :(得分:0)

快速而肮脏的解决方案:

1)domain.com/categoryName/articleID/articleName/ 2)domain.com/date/categoryName/articleName(日期应该有助于使articleName唯一) 3)domain.com/categoryName/articleName?id=xxx

没什么好看的,但这些方法都有用。

答案 1 :(得分:0)

我建议让文章标题独一无二,并且从控制器操作中你必须根据标题获得文章。

我看到你正在尝试根据类别对文章进行分组。当我最初创建blog时,我认为同样的事情,但很快意识到这不是一种灵活的方法,原因有两个。

  1. 假设您撰写了一篇名为some-title的文章,并将其放在一个类别politics下,因此该网址将为domain.com/politics/some-title,但您稍后会想到将文章移到另一个类别“国际政治”,因此您的网址现在必须更改为domain.com/international-politics/some-title并且您打破旧网址,并且已经为该链接添加书签的人现在将收到404.更好的方法是组织基于发布日期的网址,并且不会更改http://domain.com/archive/yyyy/mm/dd/unique_title

  2. 之类的内容
  3. 有时您想要标注具有多个类别的文章,那时与基于类别的方法相比,基于标签的方法将成为更好的选择。