我如何将数据从angular post传递到web api post

How do I pass data from angular post to web api post

本文关键字:post web api angular 数据      更新时间:2023-09-26

我有一个角post方法,通过它我想传递数据到web api post,但似乎不工作。我能做错什么吗?

customerPersistenceService.js

var customerPersistenceService = function ($http, $q) {
    return {
        save: function(customer) {
            var deferred = $q.defer();
            $http.post("/api/customers", customer)
                 .success(deferred.resolve)
                 .error(deferred.reject);
            return deferred.promise;
        },
        update: function(customer) {
            var deferred = $q.defer();
            $http.put("/api/customers/{id}" + customer.id, customer)
                 .success(deferred.resolve)
                 .error(deferred.reject);
            return deferred.promise;
        }
    };
};

customerEditCtrl.js

function customerEditCtr($stateParams, $location, customerPersistenceService) {
    var vm = this;
    vm.editableCustomer = {};
    vm.selectedCustomerId = $stateParams.id;
    customerPersistenceService.getById(vm.selectedCustomerId).then(
        function (customer) {
            vm.editableCustomer = customer;
        });
    };
    vm.saveCommand = function () {
        if (saveCustomer) {
            var customer = vm.editableCustomer;
            customer.id = vm.selectedCustomerId;
            if (customer.id !== 0) {
                customerPersistenceService.update(customer).then(
                    function (result) {
                        return result.data;
                    });
            } else {
                customerPersistenceService.save(customer).then(
                    function (result) {
                        return result.data;
                    });
            }
        }
    };
};

customerapiconcontroller .cs中,我的方法如下所示:

[HttpPost]
public HttpResponseMessage Post([FromBody]Customer newCustomer)
{
    try
    {
        if (ModelState.IsValid)
        {
            _customerService.AddNewCustomer(newCustomer);
            return Request.CreateResponse(HttpStatusCode.Created, newCustomer);
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
        }
    }
    catch (Exception ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }
}

[HttpPut]
public HttpResponseMessage Put(int id, [FromBody]Customer editableCustomer)
{
    if (!ModelState.IsValid)
    {
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
    }
    if (id != editableCustomer.Id)
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
    try
    {
        _customerService.UpdateCustomer(editableCustomer);
        return Request.CreateResponse(HttpStatusCode.OK, "{success:'true', verb:'PUT'}");
    }
    catch (DbUpdateConcurrencyException ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }
}

更新:经过一番调查,我了解了vm。editableCustomer似乎包含了一个所有客户对象的数组,这使得它很难传递给Web API POST。我不明白这个对象是如何与所有客户对象分配的。

有明显的错误:

$http.put("/api/customers/{id}" + customer.id, customer)

这将尝试PUT到一个url,像这样:

http://yoursite/api/customers/{id}927

您需要删除{id}部分,以便您的url是正确的:

http://yoursite/api/customers/927

用大括号括起来的段只存在于服务器端路由模板中,用于从传入的URI中提取参数。