Asp.net mvc ASP.NET MVC:url路由与查询字符串

Asp.net mvc ASP.NET MVC:url路由与查询字符串,asp.net-mvc,routing,query-string,Asp.net Mvc,Routing,Query String,我有一个类似于/Comments/Search/3的页面,在这里我搜索并显示线程“3”的所有注释 我正在添加一个排序函数(按日期、作者等)。最好的处理方法是什么/Comments/Search/3/Sort/Author或/Comments/Search/3?Sort=Author 如何在MVC中将querystring sort=author作为参数自动处理 谢谢ASP.NET MVC将在查询字符串大小写中自动处理该问题。只需将字符串排序参数添加到操作中 哪个更好?就我个人而言,我使用路径来控

我有一个类似于
/Comments/Search/3
的页面,在这里我搜索并显示线程“3”的所有注释

我正在添加一个排序函数(按日期、作者等)。最好的处理方法是什么
/Comments/Search/3/Sort/Author
/Comments/Search/3?Sort=Author

如何在MVC中将querystring sort=author作为参数自动处理


谢谢

ASP.NET MVC将在查询字符串大小写中自动处理该问题。只需将
字符串排序
参数添加到操作中


哪个更好?就我个人而言,我使用路径来控制显示的内容,使用查询字符串来控制演示文稿(它的显示方式、格式等)。因此,对于排序,我将使用querystring方法。但我不认为这两种方法在技术上都有缺点。

我更喜欢:/Comments/Search/3?sort=author。querystring是传递编程参数的好地方,特别是当参数(如本例中的参数)对于SEO目的不重要时。如果参数作为搜索词具有某种语义含义,那么第一个URL会更好

在控制器方法中,您可以使用如下内容:

public ActionResult Search(int id, string sort)
ASP.NET MVC将自动将查询字符串值连接到方法的参数

使用以下路线

routes.MapRoute(
                   "Default",                                              // Route name
                   "{controller}/{action}/{id}",                           // URL with parameters
                   new { controller = "Comments", action = "Search", id = "" }  // Parameter defaults
               );
/Comments/Search/3?sort=作者将调用Search(3,“作者”)

/注释/Search/3将调用Search(3,空)

请记住,id是必需的,因此此url将失败:
/评论/搜索

您最好的选择是添加路由规则来处理它。这里有一篇关于它的便利文章:


然后你的URL会读/Comments/Search/3/Sort/Author

我想我会选择这个解决方案。如何路由它并设置默认值,因为sort=3是可选的?由于配置上的约定,请记住方法的参数必须分别称为“id”和“sort”。在MVC 2中,您可以使用UrlParameter。可选参数和实际参数使用
int?id
而不是
int id
,如果您希望它是可选的,并且
/Comments/Search
显示带有空输入文本的默认搜索UI。