2014-02-07 122 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