我正在使用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
我收到错误没有在控制器上找到操作方法,我该如何解决。
提前致谢
答案 0 :(得分:2)
Web API严格匹配路由变量与参数名称。您可以尝试将操作更改为以下内容(此处我们将count
参数设置为别名):
[HttpGet]
public IQueryable<RecipeDTO> Random(string lang, [FromUri(Name = "id")]int count)