【发布时间】:2015-10-06 06:12:29
【问题描述】:
我有一个混合的 ASP.NET MVC 视图页面,它有一个角度控制器,它在工厂中使用 $resource 的 save() 和 delete() 方法作为下面的代码片段。控制器的 delete() 方法有效。执行 add() 时,Fiddler 显示状态为 201(Created),新用户已添加到数据库中,但 IE F12 控制台显示以下 [$resource:badcfg] 错误。不执行成功或失败回调。没有警报也没有屏幕刷新。为了您的参考,我添加了 Angular $resource 使用的 WebAPI 的 post() 操作。我还修改了 $resource 操作参数以将 isArray 设置为 false。我仍然得到相同的 [$resource:badcfg] 错误。返回结果中是否存在 Angular 不期望的内容?感谢您的帮助。
[$resource:badcfg] http://errors.angularjs.org/1.4.6/$resource/badcfg?p0=save&p1=object&p2=array&p3=POST&p4=http%3A%2F%2FmyIISServerName%3A8083%2FWCF_WebAPI%2FCMT%2Fapi%2FuserFSR%2Fadd%2F129%2F1540
ufsrApp.factory('userFsrAddFactory', ['$resource',
function($resource) {
return $resource(userFsrURI + 'userFSR/add/:userId/:fsrId', {
userId: '@userId',
fsrId: '@fsrId'
},
{
save: {method: 'POST', isArray: false}
});
}
])
ufsrApp.factory('userFsrDeleteFactory', ['$resource',
function($resource) {
return $resource(userFsrURI + 'userFSR/delete/:userId/:ufsrId'
//,
// { userId: '@userId', ufsrId: '@ufsrId' }
);
}
])
ufsrApp.controller('ufsrController', [...omitted for brevity... ,
function(....omitted for brevity....) {
$scope.add = function() {
$scope.newUserFSR = new userFsrAddFactory();
$scope.newUserFSR.userId = $scope.userId;
$scope.newUserFSR.fsrId = $scope.role;
userFsrAddFactory.save($scope.newUserFSR,
function() { //success callback
alert("New role added");
$scope.postStatus = true;
//using jquery location object to reload the page after adding a new user
location.reload(true);
},
function() { //failure callback
alert("add role failed");
$scope.postStatus = false;
}
);
}
}]);
以下是 Angular 控制器发布到的 WebAPI 的 Post()。
/// <summary>
/// create new user FSR
/// </summary>
/// <param name="userId"></param>
/// <param name="fsrId"></param>
/// <returns></returns>
[Route("add/{userId:int}/{fsrId:int}")]
public async Task < HttpResponseMessage > Post(int userId, int fsrId) {
try {
var userFSR = await repo.GetUserFSR(userId);
if (userFSR == null)
return Request.CreateResponse(HttpStatusCode.NotFound);
else {
int newKey = await repo.PostUserFSR(userId, fsrId);
return Request.CreateResponse(HttpStatusCode.Created, userFSR);;
}
} catch (Exception ex) {
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);
}
}
【问题讨论】: