如何将集合传递给GET方法

时间:2018-02-03 18:46:00

标签: c# asp.net-web-api query-string

我在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&#34;和#34;生产主管 - WC60&#34;,我需要调用此URI

  

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

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

var jobTitles = new List<string>
{
    "Production Technician - WC60",
    "Production Supervisor - WC60"
};

这样的东西
string BuiltUriFromObject(List<string> jobTitles){};

1 个答案:

答案 0 :(得分: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