Web api route wint action需要多个get方法的名称

时间:2016-12-05 09:17:53

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

我有一个名为product的asp.net mvc控制器。

public class ProductController : ApiController
{
    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok("product");
    }
}

我的路线是这样的。

config.Routes.MapHttpRoute("DefaultRoute", 
     "api/{controller}/{id}", 
      new { id = RouteParameter.Optional });

我可以访问此网址的产品获取方式:localhost:2541/api/product

我需要一些estra得到methots。

public class ProductController : ApiController
{

    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok("product");
    }

    [HttpGet]
    public IHttpActionResult Hello()
    {
        return Ok("Hello from product");
    }
}

我设定了新的路线。

config.Routes.MapHttpRoute("ActionsRoute", 
    "api/{controller}/{action}/{id}", 
    new { id = RouteParameter.Optional });

但我无法访问localhost:2541/api/product

错误:

  

找到与请求匹配的多个操作:获取

1 个答案:

答案 0 :(得分:0)

这是因为通过包含{action}路由参数,现在需要在请求中包含操作的名称,否则它将不知道要选择哪个操作。像

localhost:2541/api/product/Get

如果仍然需要root,则在映射路由时包含default。

config.Routes.MapHttpRoute("ActionsRoute", 
    "api/{controller}/{action}/{id}", 
    new { action = "Get", id = RouteParameter.Optional });

完成后,下面的调用将按照以下方式进行映射

GET localhost:2541/api/product        --> ProductController.Get
GET localhost:2541/api/product/Get    --> ProductController.Get
GET localhost:2541/api/product/Hello  --> ProductController.Hello