AngularJS save()从Web API返回不正确的响应

时间:2013-07-18 16:21:40

标签: angularjs asp.net-web-api

我有一个使用Web API后端的angularJS站点。我正在尝试进行保存,我期望得到一个结果类型枚举,它定义如下

public enum ResultType
{
    Success,
    InvalidAccountNumber,
    InvalidAddress,
    NotFound,
    Incomplete,
    Error,
    Unauthorized
}

以下是我用来设置资源的代码。

app.factory('NotificationOptInApi', function ($resource) {
return $resource(API_SOURCE + 'NotificationOptIn', {}, {
    'save': { method: 'POST', isArray: true }
});

});

这是我的保存号召

$scope.saveNotifications = function () {
    var result = NotificationOptInApi.save($scope.notifications, function () {
        // check for failure
        if (result !== 'Success') {
            $scope.saveError = result;
            return;
        }
    });
};

以下是我的回复

{0: "S", 1: "u", 2: "c", 3: "c", 4: "e", 5: "s", 6: "s", $get: function, $save: function, $query: function, $remove: function, $delete: function}

以下是返回它的代码。 Thsi是我试图返回列表而不是reusltType

public List<ResultType> Post([FromBody]dynamic notificationSubscriptionHolder)
    {
        List<NotificationSubscriptionData> notificationSubscriptions = notificationSubscriptionHolder.ToObject<List<NotificationSubscriptionData>>();

        Logger.Info("Update Account Notifications", string.Format("<updateAccountNotificationsToUser><NotificationSubscriptionData>{0}</NotificationSubscriptionData><user>{1}</user></updateAccountNotificationsToUser>", notificationSubscriptions, this.CurrentIdentity.Name));
        try
        {
            return _accountManager.UpdateAccountNotifications(this.CurrentIdentity.Name, notificationSubscriptions);
        }
        catch(Exception ex)
        {
            return new List<ResultType>() { ResultType.Error };
        }
    }

这在其他地方没有问题。我可以查看结果,它将是“成功”。我在这里看到的区别是我正在保存一个数组,所以我必须将IsArray设置为true。我目前在保存的数组中有1个项目。我得到的回应是一个字符数组。放在一起拼出“成功”。

即使我正在保存数组,有没有办法让我不能将我的响应作为数组返回?我也尝试返回一个List,认为我需要返回一个数组。当我这样做时,我得到一个包含1个项目的数组,但是在这个项目中,我有一个字符数组,表示成功。

1 个答案:

答案 0 :(得分:0)

阅读源代码我得出了一些结论:

当数组为真时,ngResource模块迭代响应中收到的每个项目,并创建一个新的Resource实例。为此,他们在响应和资源对象之间使用angular.copy。由于angular.copy仅在数组和对象类型上正常工作,但您发送[“success”]这是一个字符串,因此它无法正常显示数组的字符。在编辑器中尝试以下代码,您将得到答案。要解决此问题,您应该返回一个对象,如[{消息:“成功”}]

var obj = angular.copy('success',{});   警报(OBJ);