2013-07-22 35 views
4

我已经花了整整一天的时间,现在我已经很秃头了。WebAPI后发现多个操作 - 为什么这不工作?

控制器:

[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 } 
      ); 

我打电话copyPOST /api/set/copt/ids,并addPOST /api/set。我究竟做错了什么?

完整的错误:

"exceptionMessage": "Multiple actions were found that match the request: \r\nSystem.Net.Http.HttpResponseMessage AddSet(App.Repository.Models.Dtos.SetDto) on type App.Service.Controllers.SetController\r\nSystem.Net.Http.HttpResponseMessage

CopySet(Int32[]) on type App.Service.Controllers.SetController",

回答

5

我想你在提出像POST /api/set/copt/ids这样的请求时会出现上述错误?

Web API对于将路由变量名称匹配到操作参数名称是严格的。

试着做下面看看(:在FromUri名称参数将路线变量名称映射到你这里...参数这就是所谓的别名):

[HttpPost] 
[ActionName("copy")] 
public HttpResponseMessage CopySet([FromUri(Name="id")]int[] ids) 
-2

在你routetemplate只允许API /设置/ {ID}。但是你的请求没有一个遵循这种模式。

+0

我也让“API/{controller}/{action}/{id}“,我很清楚地有一个请求遵循以下模式:POST/api/set – RobVious

+0

你说得对,我的不好。 –