Web API发布了多个操作 - 为什么这不起作用?

时间:2013-07-22 22:58:37

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

我花了一整天的时间,我现在已经很秃了。

控制器:

[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/idsaddPOST /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 []),

2 个答案:

答案 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}。但是你的请求都没有遵循这种模式。