多参数路由Web api

时间:2015-04-24 16:17:46

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

所以我创建了一个api,网址应如下所示:http://localhost:16769/api/query/2/John_Doe。当我运行这个url时,它将带我到我的第二个Get功能。

QueryController.cs

// GET api/query
public string Get(int id, string param)
{
    string output = "";
    output = JsonConvert.SerializeObject(null);
    return output;
}

// GET api/query/5
public string Get(int id)
{
    return "value";
}

第一个参数将始终是一个整数,其中第二个参数始终是一个字符串,并且这个get请求都需要这两个参数。这是我的配置文件设置。

WebApiConfig.cs

config.Routes.MapHttpRoute(
  name: "Query",
  routeTemplate: "api/query/{id}/{paramString}",
  defaults: new { 
    controller = "query", 
    id = RouteParameter.Optional,
    paramString = RouteParameter.Optional
  }
);

使用上面的url允许输出为" value"。如果我注释掉第二个Get函数,我会收到以下错误:  No HTTP resource was found that matches the request URI 'http://localhost:16769/api/query/2/John_Doe'. No action was found on the controller 'Query' that matches the request.如何设置路线或方法以使用此模式?

2 个答案:

答案 0 :(得分:1)

使用属性路由:

[RoutePrefix("api/query")
public QueryController: ApiController
{
  [Route("{id}/{param}")]
  public string Get(int id, string param)
  {
      string output = "";
      output = JsonConvert.SerializeObject(null);
      return output;
  }

  // GET api/query/5
  [Route("{id}")]
  public string Get(int id)
  {
      return "value";
  }
}

然后您的路线配置可以恢复为默认值。

答案 1 :(得分:1)

我猜你需要在第一个方法上重命名你的参数,使其与你的routetemplate同步,即在第一个方法中使用param作为变量名,用paramString替换它,看看它是否有效