如何将集合传递给 GET 方法 [重复]

Posted

技术标签:

【中文标题】如何将集合传递给 GET 方法 [重复]【英文标题】:How to pass collection to GET method [duplicate] 【发布时间】:2018-07-14 00:33:31 【问题描述】:

我的 MVC Web Api 中有这个 GET 方法:

public IQueryable<Employee> GetEmployeeByJobTitle(List<string> jobTitles)

    var employeeByJobTitle = from e in db.Employee
                             where jobTitles.Contains(e.JobTitle)
                             select e;
    return db.Employee;

因为我需要按职称获得一组员工。因此,如果我希望所有员工的职称在“生产技术员 - WC60”和“生产主管 - WC60”,我需要调用这个 URI

http://localhost:60054/api/Employee/GetEmployeeByJobTitles/?jobTitles[0]=%22Production%20Technician%20-%20WC60%22&jobTitles[1]=%22Production%20Supervisor%20-%20WC60%22

如您所见,查询字符串庞大而复杂。现在,我需要使用来自Web.API.Client.LibrariesHttpClient 类从客户端控制台调用此方法。有没有一种简单的方法来创建从对象开始构建上述查询字符串的方法:

var jobTitles = new List<string>

    "Production Technician - WC60",
    "Production Supervisor - WC60"
;

类似

string BuiltUriFromObject(List<string> jobTitles);

【问题讨论】:

您必须使用 GET 吗?对于复杂的数据,POST 会更好。 关于您的问题,您最好将 JSON 对象作为参数传入,然后在处理程序中解析它。我建议为该 JSON 对象创建一个容器并将其用作参数。 关于您发布的代码,您的方法返回整个 Employee 表;这真的是你想要的吗?此外,您可能会使用这种方法获得“上下文已被处理”异常;实现结果集并返回 IEnumerable 可能会更好,这样您就可以清理输出并降低通过线路发送 PII 的风险。只给请求者他们需要的东西,而不是更多。 谢谢蒂姆。我对 Web Api 很陌生。我曾想过使用 POST 请求,但使用 POST 请求来获取对象列表是否正确?我仍然需要调用我的 Web Api 方法 GetEmployeeByJobTitles 但它会执行 POST 操作。我很困惑。你能帮帮我吗? 所以@K_foxer9 我将首先将List&lt;string&gt; jobTitles = ... 转换为json 对象,然后使用此字符串将uri 与***.com/questions/12610585/… 类似的东西组成 【参考方案1】:

这种情况适合FromUri attribute,它将根据查询字符串创建指定的模型。

像这样声明控制器

[HttpGet]
public IHttpActionResult GetEmployeeByJobTitle([FromUri]string[] jobTitles)

    var employeeByJobTitle = from e in db.Employee
                             where jobTitles.Contains(e.JobTitle)
                             select e;
    return Ok(employeeByJobTitle.ToArray());

通过添加尽可能多的标题来调用此方法,但将所有标题声明为相同的参数名称jobTitles="CIO"&amp;jobTitles="CTO",然后 FromUri 将使用List&lt;string&gt;"CIO", "CTO" 创建一个列表。

你的情况是这样的

api/Employee?jobTitles=%22Production%20Technician%20-%20WC60%22&jobTitles=%22Production%20Supervisor%20-%20WC60%22

【讨论】:

以上是关于如何将集合传递给 GET 方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 POST 方法将 javascript/jQuery 变量传递给 PHP [重复]

将 SQL 参数集合传递给函数

如何使用 GET 或 POST 方法将对象详细信息传递给 index.html 并在 HTML <pre> 标记中显示

如何将值从angularjs传递给节点[重复]

VBA:将二维数组传递给集合函数[重复]

如何在java中将字符串集合转换为字符串数组[重复]