C# Web API 2控制器不接受QueryString参数
我有一个GET()控制器来检索实体列表。我想向操作传递一个参数,以过滤返回的对象列表,如下所示: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
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最佳实践。@ssilas777config.Routes.maphttroute(名称:“DefaultApi”,routeTemplate:“API/{controller}/{id}”,默认值:new{id=RouteParameter.Optional});
@NadavMiller Web Api中的最佳实践将参数作为主体发送或在URL中定义,并将其映射到registerRoute@AmitAgrawal你从哪里得到的“最佳实践”建议,因为我以前从未听说过它?应该没有必要这样做。查询参数映射确实有效。