2

我正在使用 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 (匹配 details 方法)

但是当我尝试时:

控制器名称/en/random/5

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

提前致谢

4

1 回答 1

2

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

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

于 2013-11-03T17:59:37.500 回答