我有一个名为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
错误:
找到与请求匹配的多个操作:获取
答案 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