1

我的 MVC 4 Web 服务有一个新用例。我需要将查询字符串上的参数列表传递给 Web API,例如,

http://host/SomeWebApi?arg=x&arg=y

我以前在我的网站控制器中使用控制器ICollection<string> arg中的参数简单轻松地做到了这一点。现在可以了,但它是一个网页,而不是 API。

现在,我正试图让同一事物的 Web API 版本正常工作。我在下面制作了一个简单的测试界面,并且集合 arg 始终为空。我已经尝试过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
4

1 回答 1

2

我遇到了这个答案ApiController Action Failing to parse array from querystring并发现要解决这个问题,您需要将FromUriAttribute. 所以在你的例子中:

public string GetArgTest([FromUri]ICollection<string> suite)
{
}

我猜这是有道理的,通常使用 API 控制器,您希望执行更多的 POST 和 PUT 请求,您通常会包含发布数据而不是 QueryString。

于 2014-10-13T10:10:07.230 回答