将多个值作为查询字符串传递在MVC中是好的还是坏的做法

时间:2012-02-05 17:43:26

标签: asp.net-mvc-3 model-view-controller asp.net-mvc-routing

在我的页面中,我将多个值传递给控制器​​。

我的网址类似于: http://blah/Search/Page/?type=new&keywords=blahblah&sortType=Date

在MVC中传递多个值作为查询字符串的良好实践吗?或者我们可以使用引入自定义路由来斜杠分隔URL?

注意:让我们考虑查询字符串中的所有值,不是安全/敏感数据。

4 个答案:

答案 0 :(得分:2)

我不认为这是一种不好的做法,只要它不是感性数据。这取决于您是否要在global.asax中编写自定义路由来处理它。自定义路线提供更清晰的网址。此外,对于更多精明的用户,如果他们了解您网站上的概念,则更直观。

所以考虑一下:

http://baseballcards/topps/1980      // search for baseball cards made by topps in the 1980s
http://recipes/deserts/pies         // search for a desert recipe that are pies  
http://code/csharpe/linq             // search for csharp code that has linq examples

在这些示例中,我们几乎可以像句子一样阅读网址,使其更直观,让用户能够即插即用。它清楚地表示查询几乎就像一个面包屑,准确地表明了上下文的内容。我个人喜欢这个。但无论哪种方式都是一种很好的方法。

使用更多参数进行扩展:

routes.MapRoute(
            "SearchRecipes",                                              
            "Search/Recipes/{category}/{type}",                           
            new { controller = "Search", action = "Recipes", category = "all" , type = ""}  
 );

一些例子:

Search/Recipes/Deserts/Pie
Search/Recipes/Dinner/Beef
Search/Recipes/Lunch/Salads

答案 1 :(得分:1)

稍后选择(路由值中的查询字符串),以防

  1. 如果您担心标题长度。(默认情况下,get参数是标题的一部分,Web服务器在IIS7中默认接受1024字节标题长度。)
  2. 隐藏代码的逻辑实现。
  3. Url看起来很好,更容易记住。
  4. 否则这两种方法都是平等的。

答案 2 :(得分:0)

我认为在查询字符串中传递搜索参数是你应该去的方式,特别是如果所有参数都是可选的。它还使您可以毫不费力地使用普通的method="get"表单。

我不认为“安全/个人数据”与此有任何关系,因为查询字符串是URL的一部分,就像路径一样。

答案 3 :(得分:0)

IMO我认为这绝对没问题。我认为当路径表示函数并且查询字符串参数表示过滤器时,最好在MVC中使用查询字符串。就像在搜索中一样。

但是,我不会将查询字符串参数用于表示所检索内容信息的数据。因此,如果为年份和月份返回多页文章,我会在路径中包含文章的年份和月份,但不包括页码。