我花了一整天的时间,我现在已经很秃了。
控制器:
[HttpPost]
public HttpResponseMessage AddSet(SetDto set)
[HttpPost]
[ActionName("copy")]
public HttpResponseMessage CopySet([FromUri]int[] ids)
按顺序路线:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
routes.MapHttpRoute(
name: "Set",
routeTemplate: "api/set/{id}",
defaults: new { controller = "set", id = RouteParameter.Optional }
);
我使用copy
致电POST /api/set/copt/ids
,add
致POST /api/set
。我究竟做错了什么?
完整错误:
" exceptionMessage":"发现多个匹配的动作 请求:\ r \ nSystem.Net.Http.HttpResponseMessage 类型上的AddSet(App.Repository.Models.Dtos.SetDto) App.Service.Controllers.SetController \ r \ nSystem.Net.Http.HttpResponseMessage
App.Service.Controllers.SetController"上的CopySet(Int32 []),
答案 0 :(得分:5)
我认为您在提出POST /api/set/copt/ids
等请求时遇到上述错误?
Web API严格将路由变量名称与操作参数名称匹配。
尝试执行以下操作并查看( note :FromUri中的Name参数会将路径变量名称映射到此处的参数...这称为别名):
[HttpPost]
[ActionName("copy")]
public HttpResponseMessage CopySet([FromUri(Name="id")]int[] ids)
答案 1 :(得分:-2)
在您的路线模板中,您只允许api / set / {id}。但是你的请求都没有遵循这种模式。