我想在使用Web API和角度资源创建新记录时获取新ID

时间:2015-03-01 15:01:55

标签: angularjs ngresource

我使用Web API和Angular Resource来管理我的应用程序.. 在控制器中使用Save方法时,我希望收到新保存的记录ID ...

我的网络API方法在响应创建的消息中返回新的ID ..但我无法读取它...

这是我的服务:

'use strict';
appServices.factory('projectsService', function ($resource, ngAuthSettings) {
    var serviceBase = ngAuthSettings.apiServiceBaseUri;
    return $resource(serviceBase + '/api/project/:id', {}, {
        get: { method: 'GET', params: { id: '' }, isArray: true },
        getById: { method: 'GET', params: { id: '0' }, isArray: false },
        save: { method: 'POST' ,isArray: false},
        update: { method: 'PUT' },
        remove: { method: 'DELETE' }
    });
});

这是我的控制器方法:

 $scope.save = function ($event) {

        $event.preventDefault();

        $('#AddProjectForm').parsley().validate();
        if ($('#AddProjectForm').parsley().isValid() ) {
//HEre is my save method
            projectsService.save($scope.project).$promise.then(function (newid) {
    $location.path('/project/' + newid);
         },
             function (response) {

                 $scope.message = "Failed to register user due to:" + errors.join(' ');
             });
        }
    };

并且在我的网络API中,这是返回

HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, projectRepository.NewID);
                return response;

任何想法?

1 个答案:

答案 0 :(得分:0)

你最有可能从你的api传回一个json对象。所以,newid可能是一个json对象。尝试更新此行:

$location.path('/project/' + newid);

$location.path('/project/' + newid.id);

此外,请确保您的api确实在回复中传回了ID,并检查上述行不适合您的ID字段的属性名称。

更新:

尝试更新您的web.api响应函数,使其如下所示:

return Request.CreateResponse(HttpStatusCode.Created, new { projectRepository.NewID });