Web API 2控制器不接受QueryString参数

时间:2014-02-18 12:16:42

标签: c# asp.net .net asp.net-mvc asp.net-web-api

我有一个GET()控制器来检索实体列表。我想将一个参数传递给动作来过滤返回的对象列表,如下所示:

Mysite.com/Users?nameContains=john

这是我的行动定义:

public IEnumerable<object> Get(string nameContains)
{
    // I want to use nameContains here
}

我收到错误:

  

请求的资源不支持http方法'GET'。

如果我将方法恢复为不获取该参数,则可以正常工作。

3 个答案:

答案 0 :(得分:1)

试试这个

public IEnumerable<object> Get([FromUri] string nameContains)
{
    // I want to use nameContains here
}

此外,由于您使用的是Web Api 2,因此您可以使用attribute routing

[Route("users")]
public IEnumerable<object> Get([FromUri] string nameContains)
{

答案 1 :(得分:1)

抱歉,这是我的错误,我使用了2个参数而我没有传递其中一个(也没有为其分配默认值)所以它返回了一个错误。欢呼声。

答案 2 :(得分:0)

您可以为WebApiConfig条目添加新路线。

例如,您的方法定义:

public IEnumerable<object> Get(string nameContains)
{
    // I want to use nameContains here
}

添加:

config.Routes.MapHttpRoute(
    name: "GetSampleObject",
    routeTemplate: "api/{controller}/{nameContains}"
);

然后将参数添加到HTTP调用:

GET //<service address>/Api/Data/test 

或在您的方法中使用HttpUtility.ParseQueryString

// uri: /Api/Data/test 
public IEnumerable<object> Get()
{
    NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query);
    var contains = nvc["nameContains"];
    // BL with nameContains here
}