具有ICollection或数组的MVC查询字符串

时间:2013-05-23 15:06:15

标签: asp.net-mvc

我的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

1 个答案:

答案 0 :(得分:2)

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

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

这是有道理的,我猜,通常使用API​​控制器,你希望做更多的POST和PUT请求,你通常包括post数据而不是QueryString。