你找到了许多有用的链接来解决这个问题,但没有什么对我有用:(。任何人都可以看看我出错了吗?
控制器:
[ActionName("savebook")]
[HttpPost]
public HttpResponseMessage PostSaveBook([FromBody]Book product)
{
return Add(product);
}
[ActionName("savemobile")]
[HttpPost]
public HttpResponseMessage PostSaveMobile([FromBody]Mobile product)
{
return Add(product);
}
WebApiRouteConfig。
config.Routes.MapHttpRoute(
name: "ControllerOnly",
routeTemplate: "api/{controller}"
);
// Controller with ID
// To handle routes like `/api/VTRouting/1`
config.Routes.MapHttpRoute(
name: "ControllerAndId",
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // Only integers
);
// Controllers with Actions
// To handle routes like `/api/VTRouting/route`
config.Routes.MapHttpRoute(
name: "ControllerAndAction",
routeTemplate: "api/{controller}/{action}"
);
错误:
**
" ExceptionMessage":"发现多个匹配的动作 请求:
**
答案 0 :(得分:0)
您注册的第一条路线是RESTful样式路线,它不包含{action}
段。
由于路径的评估顺序与它们的注册顺序相同,因此无论何时发送POST请求,控制器名称都将从URL中获取,然后,操作选择器将查找名称以{开头的操作{1}}。在您的情况下,有两种行为符合这一条件:Post
和PostSaveBook
。
如果第一个注册路由是PostSaveMobile
路由,则会从URL中获取操作,操作选择器可以正确选择所需操作。
如果您想使用RESTful样式,则必须使用attribute routing来消除歧义。