我有一个使用Web API后端的angularJS网站。我正在尝试进行保存,并希望返回下面定义的resulttype枚举
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}
这是返回它的代码
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个项目。我得到的响应是一组字符。他们拼在一起拼出"成功"。
有没有一种方法可以让我在保存数组时不将响应作为数组返回?我还尝试返回一个列表,认为我需要返回一个数组。当我这样做的时候,我会得到一个有1个项目的数组,但在这个1个项目中,我有一个字符数组,上面写着成功。
阅读源代码,我得出了一些结论:
当数组为true时,ngResource模块对响应中接收到的每个项进行迭代,并创建一个Resource的新实例。为此,他们在响应和资源对象之间使用angular.copy。由于angular.copy只能在数组和对象类型上正常工作,但您发送的是["success"],它是一个字符串,因此无法正确显示数组的字符。在编辑器中尝试下面的代码,你会得到答案。要解决这个问题,你应该返回一个类似〔{Message:"Success"}〕的对象
var obj=angular.copy("成功",{});警报(obj);