0

我有一个命名产品的asp.net mvc控制器。Web api路由wint动作需要名称为多个get方法

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

我需要一些雌得到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

错误:

Multiple actions were found that match the request: Get

回答

0

这是因为通过包括{action}路线参数现在是需要包括在其他请求的操作的名称明智的是它不知道选择哪个动作。像

localhost:2541/api/product/Get 

如果仍然需要根目录,那么在映射路由时包含默认值。

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 
相关问题