使用angularjs将多个对象发送到webapi

我的ASP.NET WebApi应用程序中有以下控制器:

[Route("api/PutItem/")] [HttpPut] public IHttpActionResult PutItem(Guid id, Item item) { if (!ModelState.IsValid) } 

我在“Items”AngularJs服务中有以下内容

 var doEditItem = function(item){ var deferred = $q.defer(); console.log('item', item); var config = { headers: { 'Authorization': "Bearer " + $rootScope.token } //,params: {id:item.ItemId} } $http.put(sitesettings.url() + "api/PutItem/", item, config) .success(function(data){ deferred.resolve(data); }).... 

我最终收到这条消息:

没有找到与请求URI匹配的HTTP资源’ http:// localhost:63289 / api / PutItem /’。“,MessageDetail :”在控制器上找不到与请求匹配的“项目”。“}

我已经对参数进行了更改以添加如下项目:

 jItem = {id:item.ItemId, item:item} 

然后我尝试将jItem传递给put方法,如下所示:

  $http.put(sitesettings.url() + "api/PutItem/", jItem, config) 

我的应用程序选择了Guid,但不是新的Item。 如果我删除Guid并发送项目,我的应用程序会选择新项目。

我想知道如何更改我的应用程序,以便我可以发送一个Guid,应用程序也会选择新的项目。

我使用过Angular.toJson(item,false); 但这似乎并没有改变我的ASP.NET应用程序接收信息的方式。

非常感谢

您不能将复杂类型与原始类型一起发送到WebAPI操作,您可以发送多个基本类型(Guid,int,字符串等)或单个复杂类型( Item )。 如果你想发送两者,解决方法是使用JObject

 [HttpPut] public void PutItem(JObject data) { Item item = data["item"].ToObject(); Guid id = data["id"].ToObject(); } 

从角度发送如下:

  $http({ url: "/api/PutItem", method: "PUT", data: {id: SOMEGUID, item: { ......} } }); 

在你的代码中:

 [Route("api/PutItem/")] [HttpPost] public IHttpActionResult PutItem(Guid id, Item item) 

所以你发送Put或Post? 我认为这是一个问题

从一个工作项目中拉出来

AngularJS:

 var apiUrl = ngRoot + '/api/ControllerName'; //ControllerName should match APIControllerName $http.put( apiUrl + '/RoutValue/' + id, model ); 

WebAPIController:

 [HttpPut] [Route("api/APIControllerName/RoutValue/{id}")] public HttpResponseMessage Put(int id, Model model) 

或模型列表

 public HttpResponseMessage Put(int id, List model) 

@Pakk,你的方法工作导致第一个参数“id”作为查询字符串的一部分发送,而第二个参数作为请求体的一部分发送。 这是它唯一的工作方式,从身体发送多个将无法正常工作。