2014-02-07 82 views
4

当我将用户作为查询字符串传入时(使用$ http中的参数),并将web api方法设置为在uri中查找它们,所有内容都是非常好的。但是当我按照以下方式传递它们时,用户显示为空。我在这里错过了什么?web api put识别查询字符串,但不识别身体

角功能

scope.saveChanges = function() { 
     // create array of user id's 
     var users = []; 
     angular.forEach(scope.usersInRole, function (v, k) { 
      users.push(v.Key); 
     }); 

     var data = { user: users }; 

     var token = angular.element("input[name='__RequestVerificationToken']").val(); 

     // put changes on server 
     http({ 
      url: config.root + 'api/Roles/' + scope.selectedRole + '/Users', 
      method: 'PUT', 
      data: data, 
      contentType: "application/json; charset=utf-8", 
      headers: { "X-XSRF-Token": token }, 
      xsrfCookieName: '__RequestVerificationToken' 
     }).success(function (result) { 
      // notify user changes were saved 
      angular.element('#myModal').reveal({ closeOnBackgroundClick: false }); 
     }); 
    }; 

网页API行动

public HttpResponseMessage Put(HttpRequestMessage request, [FromUri]string role, [FromBody]string[] user) 
      { 

       return request.CreateResponse(HttpStatusCode.NoContent); 
      } 
+1

尝试:'数据:用户'而不是'数据:数据' –

+0

嗯,我会成为猴子叔叔的儿子。很简单。把这个答案放在一个答案中,这样我可以标记它并给你信用。 – Michael

+0

我很好奇,但为什么只是传递数据到数据工作如此干净,并传递如何我没有它。 – Michael

回答

7

尝试:的data: users代替data: data

在asp.net api中,整个请求体被绑定到一个参数。因此,您的在动作方法参数中不能有多个参数[FromBody]。只有一个=>我们不需要在请求主体中指定一个属性名称。

+1

感谢您对[FromBody]的澄清。 – Michael