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

C# Web API 2控制器不接受QueryString参数,c#,asp.net,.net,asp.net-mvc,asp.net-web-api,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 } public IEnumerable<object> Get(string nameConta

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

Mysite.com/Users?nameContains=john
这是我的行动定义:

public IEnumerable<object> Get(string nameContains)
{
    // I want to use nameContains here
}
public IEnumerable<object> Get(string nameContains)
{
    // I want to use nameContains here
}
public IEnumerable Get(字符串名称包含)
{
//我想在这里使用nameContains
}
我得到一个错误:

请求的资源不支持http方法“GET”

如果我将该方法还原为不获取该参数,它将起作用。

试试这个

public IEnumerable<object> Get([FromUri] string nameContains)
{
    // I want to use nameContains here
}
public IEnumerable Get([FromUri]字符串名称包含)
{
//我想在这里使用nameContains
}
另外,由于您使用的是Web Api 2,因此可以使用

[路由(“用户”)]
public IEnumerable Get([FromUri]字符串名称包含)
{

您可以将新路由添加到
WebApiConfig
条目中

例如,您的方法定义:

public IEnumerable<object> Get(string nameContains)
{
    // I want to use nameContains here
}
public IEnumerable<object> Get(string nameContains)
{
    // I want to use nameContains here
}
然后将参数添加到HTTP调用:

GET //<service address>/Api/Data/test 
GET///Api/Data/test
或者在你的方法中使用

// uri: /Api/Data/test 
public IEnumerable<object> Get()
{
    NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query);
    var contains = nvc["nameContains"];
    // BL with nameContains here
}
//uri:/Api/Data/test
公共IEnumerable Get()
{
NameValueCollection nvc=HttpUtility.ParseQueryString(Request.RequestUri.Query);
var contains=nvc[“名称包含”];
//名为的BL包含在这里
}

抱歉,这是我的错误,我使用了两个参数,但没有传递其中一个(也没有为其指定默认值)因此它返回了一个错误。干杯。

尝试作为body对象发送。您可以了解如何定义路由?@AmitAgrawal我不想这样做,因为它不符合RESTful API最佳实践。@ssilas777
config.Routes.maphttroute(名称:“DefaultApi”,routeTemplate:“API/{controller}/{id}”,默认值:new{id=RouteParameter.Optional});
@NadavMiller Web Api中的最佳实践将参数作为主体发送或在URL中定义,并将其映射到registerRoute@AmitAgrawal你从哪里得到的“最佳实践”建议,因为我以前从未听说过它?应该没有必要这样做。查询参数映射确实有效。