具有干净URL的多个路由参数

时间:2009-02-06 01:52:52

标签: asp.net-mvc routing

我在ASP.NET MVC中使用digg克隆来帮助更好地自学ASP.NET MVC。我一直在研究StackOverflow在传递类似的东西时如何处理路由,我想我认为使用干净的URL的重点是你没有像在SEO的URL末尾那样的东西?sort = blah。

是否有建议的方法在您的网址中包含许多可能的可选参数,同时保持其清洁。我有一些想法,我想得到一些反馈。

选项1:

使用通配符(yuck)

选项2:

将排序添加到URL的开头,因为它具有最大的覆盖率,并且在查看故事时始终适用。 Exampke(使用StackOverflow)

而不是?so​​rt = featured ...

https://stackoverflow.com/featured/tagged/asp.net-mvc
https://stackoverflow.com/new/tagged/c#
https://stackoverflow.com/tagged/asp.net(某种默认值)

无论如何 - 我似乎无法想到其他任何方法。

3 个答案:

答案 0 :(得分:3)

挂起,堆栈溢出 使用查询字符串参数进行排序,例如:

https://stackoverflow.com/questions/518812?sort=oldest#sort-top

/特色是不同的。在这种情况下,您将控制返回的记录,而不仅仅是它们的排序方式。

网址描述资源。查询字符串参数描述了资源的呈现方式。一般来说:

  • 描述返回数据性质的碎片应该是URL的一部分。
  • 描述数据呈现方式的片段应该是查询字符串参数。

拥有查询字符串参数不会损害您的SEO。

答案 1 :(得分:2)

你应该采用最适合你的方法。有些事情需要考虑:

  • 可维护性:如何在整个生命周期内维护链接结构。别人怎么样?
  • 可读性/调试:您将如何调试链接?自然语言对你有帮助吗? (它帮助到我)。

答案 2 :(得分:1)

假设您有一个名为StoryController的控制器,它会显示您的所有帖子。您可以使路线看起来像这样:

routes.MapRoute("FeatureTagged", "feature/tagged/{tag}", new { 
       controller = "Story", action = "ShowFeaturedByTag" });
routes.MapRoute("NewTagged", "new/tagged/{tag}", new { 
       controller = "Story", action = "ShowNewByTag" });
BTW,已经有一个关于digg的ASP.NET MVC克隆了。它被称为Kigg:http://www.codeplex.com/Kigg并且它在名为DotNetShoutout的网站上运行