我们的应用程序的后端正在公开接受IEnumerable的web api。以下是示例定义:
[HttpGet]
public HttpResponseMessage Get(int? id = null, [FromUri]IEnumerable<string> category = null)
我手动创建带有查询参数的URL,如下所示:
category=category1&category=category2
..并将其附加到实际的URL以获取结果。
有没有更好的方法可以将类别列表添加为查询参数而不是手动创建网址?将字符串数组传递给URI中的端点的最佳方法是什么?
答案 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"]