如何将集合传递给 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.Libraries
的HttpClient
类从客户端控制台调用此方法。有没有一种简单的方法来创建从对象开始构建上述查询字符串的方法:
var jobTitles = new List<string>
"Production Technician - WC60",
"Production Supervisor - WC60"
;
类似
string BuiltUriFromObject(List<string> jobTitles);
【问题讨论】:
您必须使用 GET 吗?对于复杂的数据,POST 会更好。 关于您的问题,您最好将 JSON 对象作为参数传入,然后在处理程序中解析它。我建议为该 JSON 对象创建一个容器并将其用作参数。 关于您发布的代码,您的方法返回整个 Employee 表;这真的是你想要的吗?此外,您可能会使用这种方法获得“上下文已被处理”异常;实现结果集并返回 IEnumerableGetEmployeeByJobTitles
但它会执行 POST 操作。我很困惑。你能帮帮我吗?
所以@K_foxer9 我将首先将List<string> 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"&jobTitles="CTO"
,然后 FromUri 将使用List<string>"CIO", "CTO"
创建一个列表。
你的情况是这样的
api/Employee?jobTitles=%22Production%20Technician%20-%20WC60%22&jobTitles=%22Production%20Supervisor%20-%20WC60%22
【讨论】:
以上是关于如何将集合传递给 GET 方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 POST 方法将 javascript/jQuery 变量传递给 PHP [重复]