[C#]AngularJS WebApi 把-不工作吗?

发布时间: 2017/2/23 20:09:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我知道它被问过,我试着找出我自己 (和失败)。因此,这里是我的代码︰

...
$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,不允许。我试着职位,同样的事情。我猜是我在做一个错误的电话......我只是不知道的错误在哪里:(

解决方法 1:

我认为这个问题是因为 Web API 控制器定义 5 params,但 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)
{
    .....
}
赞助商