Web api控制器具有两个具有相同参数的get方法

时间:2013-11-03 17:40:27

标签: asp.net asp.net-web-api asp.net-routing

我正在使用asp.net web api构建一个Http服务,我在控制器中有两个get方法具有相同的参数,我无法弄清楚如何定义匹配两种方法的路由,我只能调用一个他们和另一个我得到一个错误,没有在控制器上找到任何操作方法。 以下是定义的路线

RouteTable.Routes.MapHttpRoute(
         name: "default",
         routeTemplate: "{controller}/{lang}",
         defaults: new { lang = System.Web.Http.RouteParameter.Optional });
RouteTable.Routes.MapHttpRoute(
         name: "details",
         routeTemplate: "{controller}/{lang}/{action}/{id}");

和控制器中的方法:

public IQueryable<RecipeDTO> Get(string lang)
{

}

[HttpGet]
public RecipeDTO Details(string lang, int id)
{

}

[HttpGet]
public IQueryable<RecipeDTO> Random(string lang, int count)
{


}

你看到方法Details和Random有相同的参数,我可以进行以下调用:

controller-name / en(与第一个get方法匹配)

controller-name / en / details / 1(与详细信息方法匹配)

但是当我尝试时:

控制器名/ EN /无规/ 5

我收到错误没有在控制器上找到操作方法,我该如何解决。

提前致谢

1 个答案:

答案 0 :(得分:2)

Web API严格匹配路由变量与参数名称。您可以尝试将操作更改为以下内容(此处我们将count参数设置为别名):

[HttpGet]
public IQueryable<RecipeDTO> Random(string lang, [FromUri(Name = "id")]int count)