如何从C#http客户端将字符串数组作为查询参数发送到WebAPI

时间:2017-11-27 11:17:39

标签: c# arrays asp.net-web-api httpclient

我们的应用程序的后端正在公开接受IEnumerable的web api。以下是示例定义:

[HttpGet]
public HttpResponseMessage Get(int? id = null, [FromUri]IEnumerable<string> category = null)

我手动创建带有查询参数的URL,如下所示:

category=category1&category=category2

..并将其附加到实际的URL以获取结果。

有没有更好的方法可以将类别列表添加为查询参数而不是手动创建网址?将字符串数组传递给URI中的端点的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

试试这个;

/foo/Get?id=123&category=category1,category2

您可以使用comma(,)分隔数组元素。

答案 1 :(得分:0)

我认为您已将WebAPI设置的路由设置为默认值:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }

您需要在[FromUri]

上将您的方法签名更新为包含 id
public IEnumerable<string> Get([FromUri]int? id = null, [FromUri]IEnumerable<string> category = null) {...}

这将允许id来自Uri而不是路线数据。

因此意味着如果你收到请求:

GET /api/foo?id=123&category=category1&category=category2

这应该给你预期的

id = 123

category = ["category1", "category2"]

您还可以执行以下请求:

GET /api/foo?category=category1&category=category2

并将为您提供

的预期值
id = null

category = ["category1", "category2"]