asp.net MVC:将查询字符串作为字符串或单个参数传递?

时间:2009-07-21 17:03:04

标签: asp.net asp.net-mvc query-string

在asp.net MVC中,我在我的控制器中有一个搜索操作,我正在尝试决定是否应该将查询作为字符串传递给我的存储库

public ActionResult Search(string query)
{
    return View(_repository.ListPeople(query));
}

或作为个别参数:

public ActionResult Search(string FirstName, string LastName, System.Nullable<byte> Education)
{
    return View(_repository.ListPeople(FirstName, LastName, Education));
}

我在网上看到的很多例子都使用查询字符串方法,但对我来说它并不觉得“安全”,即使你有一堆参数要传递时更容易处理。对于更好的方法,是否存在普遍的共识?

3 个答案:

答案 0 :(得分:2)

我赞成模型绑定。这样,如果您决定添加额外的搜索选项,则除了模型类之外没有任何更改。

信息herehere

答案 1 :(得分:2)

就个人而言,我更喜欢不让存储库承担解析查询字符串的责任。从关注点分离的角度来看,我觉得存储库应该保持与实现无关。例如,必须为单元测试创​​建查询字符串比直接使用参数调用方法更麻烦。

话虽如此,我也更喜欢控制器与定义明确的服务接口,因为根据我的经验,它有助于保持控制器更轻。我尝试让服务充当存储库的网关,尽管没有要求这样做。我将把两件事传递到存储库(或者更可能是服务),这取决于调用的目的是什么 - 一组参数,就像你在第二个例子中给出的那样,或者作为构造的域对象,如果适用的话。

答案 2 :(得分:1)

我绝对建议选择第二条路线。您无需将控制器与存储库耦合。让您的存储库负责获取数据,它不应该对查询字符串进行任何类型的解析。那不是它的工作。让控制器处理。