2015-12-20 64 views
1

我知道它之前已經被問過了,而且我已經嘗試瞭解自己(並且失敗了)。因此,這裏是我的代碼:AngularJS WebApi Put - 不工作?

... 
$resource("/SWDB/api/admin/users/:id", { id: "@id" }, 
     { 
      update: { 
       method: "PUT" 
      } 
     } 
... 

而且

... 
return AdminResource.users.update(params).$promise; 
... 

這是我更新怎麼叫:

$scope.params = { 
     id: $stateParams.id, 
     email: $scope.userservice.selectedUser.email, 
     oldPassword: $scope.oldPassword, 
     newPassword: $scope.newPassword, 
     isLockoutEnabled: $scope.userservice.selectedUser.lockoutEnabled 
    }; 

    $scope.userservice.updateUser($scope.params) 
      .then(function() { $state.go("/"); }, function(error) { console.log(error) }); 

最後,這是我的控制器方法:

public async Task<HttpResponseMessage> Put(string id, string email, 
      string oldPassword, string newPassword, bool isLockoutEnabled) 
     { 
      var user = await _owinManager.UserManager.FindByIdAsync(id); 
      if (user != null) 
      { 
       user.Email = email; 

       if (!string.IsNullOrEmpty(oldPassword)) 
       { 
        if (_owinManager.UserManager.PasswordHasher.HashPassword(oldPassword) == user.PasswordHash) 
        { 
         if (!string.IsNullOrEmpty(newPassword)) 
         { 
          user.PasswordHash = _owinManager.UserManager.PasswordHasher.HashPassword(newPassword); 
         } 
        } 
       } 

       var result = await _owinManager.UserManager.UpdateAsync(user); 
       if (result.Succeeded) 
       { 
        return new HttpResponseMessage(HttpStatusCode.Accepted); 
       } 
      } 

      return new HttpResponseMessage(HttpStatusCode.InternalServerError); 
     } 

我一直得到:405,不允許。我試過POST,同樣的事情。我的猜測是我正在發出一個錯誤的電話......我只是不知道錯誤在哪裏:(

+0

我會通過一個模型,而不是單一的參數 - 這種方式,您可以利用Web API模型結合 –

+0

。我只是這樣做,它的工作 - 顯然是有約束力的作品,而單參數不。我的猜測是,棱角發送params作爲JSON,這有助於? –

回答

1

我認爲問題是因爲Web API控制器定義了5個參數,但是,angularjs發送1(是,一個複雜的參數),那麼,在你的web API變更五PARAMS像這樣一個複雜的參數:

public class Test 
{ 
    public string Id {get; set;} 
    public string Email {get; set;} 
    public string OldPassword {get; set;} 
    public string NewPassword {get; set;} 
    public bool IsLockoutEnabled {get; set;} 
} 

public async Task<HttpResponseMessage> Put(Test entity) 
{ 
    ..... 
}