我的MVC 4 Web服务有一个新的用例。我需要将查询字符串的参数列表传递给Web API,例如
http://host/SomeWebApi?arg=x&arg=y
我之前使用ICollection<string> arg
作为控制器中的参数,在我的网站控制器中简单轻松地完成了这项工作。这是现在的工作,但它是一个Web页面,而不是API。
现在,我正在试图获得同样的Web API版本。我在下面创建了一个简单的测试界面,集合arg始终为null。我也尝试了List<string>
和string[]
作为类型。我在俯瞰什么?
路线登记:
config.Routes.MapHttpRoute(
name: "Experiment",
routeTemplate: "Args",
defaults: new
{
controller = "Storage",
action = "GetArgTest",
suite = UrlParameter.Optional,
},
constraints: new
{
httpMethod = new HttpMethodConstraint(new HttpMethod[] { new HttpMethod("GET") })
}
);
Web API控制器代码:
public string GetArgTest(ICollection<string> suite)
{
if (suite == null)
{
return "suite is NULL";
}
else
{
return "suite is NON-NULL";
}
}
测试查询字符串导致“suite is NULL”:
http://localhost:5101/Args?suite=1&suite=2
答案 0 :(得分:2)
我遇到了这个答案ApiController Action Failing to parse array from querystring并发现要解决此问题,您需要加入FromUriAttribute
。所以在你的例子中:
public string GetArgTest([FromUri]ICollection<string> suite)
{
}
这是有道理的,我猜,通常使用API控制器,你希望做更多的POST和PUT请求,你通常包括post数据而不是QueryString。