我有一个GET()控制器来检索实体列表。我想将一个参数传递给动作来过滤返回的对象列表,如下所示:
Mysite.com/Users?nameContains=john
这是我的行动定义:
public IEnumerable<object> Get(string nameContains)
{
// I want to use nameContains here
}
我收到错误:
请求的资源不支持http方法'GET'。
如果我将方法恢复为不获取该参数,则可以正常工作。
答案 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
}