Web API - 多个参数为/ param1 / param2 / param3 /不起作用

时间:2015-12-14 20:54:47

标签: asp.net-web-api

我有一个ASP.NET Web API项目,我在控制器中有一个单独的方法..

public IHttpActionResult MyMethod(int param1, int param2, int param3)
{
  var theSum = param1 + param2 + param3;
  return Ok(theSum);
}

我在RouteConfig.cs

中有以下路线
routes.MapRoute(
  name: "MyRoute",
  url: "api/{controller}/{action}/{param1}/{param2}/{param3}",
  defaults: new { controller = "MyController", action = "MyRoute", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }
  );

当我使用以下URL调用API时,一切都按预期工作..

http://localhost/api/mycontroller/mymethod?param1=2&param2=4&param3=6

然而,当我尝试按如下方式调用API时,出现404 - The resource cannot be found错误。

http://localhost/api/mycontroller/mymethod/2/4/6/

任何想法为什么?我以为我正确设置了路由,因为参数是.NET原语我虽然可以将它们作为param1/param2/param3

传递

1 个答案:

答案 0 :(得分:1)

您使用的是MVC5吗?如果是这样,我建议使用Route()属性而不是routes集合,对我来说至少它更容易管理。我能够使用这种方法使用您的样本。

[Route("api/values/MyMethod/{param1}/{param2}/{param3}")]
[HttpGet]
public IHttpActionResult MyMethod(int param1, int param2, int param3)
{
    var theSum = param1 + param2 + param3;
    return Ok(theSum);
}

然后通过http://localhost/api/values/mymethod/2/4/6调用它正确返回12。