I'm developing an app with an Angular based front-end and an ASP.NET back 
end using oData and Oracle. I'm at the point where I'm trying to patch 
records on the back end. I'm using generic boilerplate code on the back end 
in my controller and the patch method looks like this:

      <AcceptVerbs("PATCH", "MERGE")>
        Async Function Patch(<FromODataUri> ByVal key As Decimal, ByVal 
patchValue As Delta(Of FTP_ORDERS)) As Task(Of IHttpActionResult)
            Validate(patchValue.GetEntity())

            If Not ModelState.IsValid Then
                Return BadRequest(ModelState)
            End If

            Dim fTP_ORDERS As FTP_ORDERS = Await 
db.FTP_ORDERS.FindAsync(key)
            If IsNothing(fTP_ORDERS) Then
                Return NotFound()
            End If

            patchValue.Patch(fTP_ORDERS)

            Try
                Await db.SaveChangesAsync()
            Catch ex As DbUpdateConcurrencyException
                If Not (FTP_ORDERSExists(key)) Then
                    Return NotFound()
                Else
                    Throw
                End If
            End Try

            Return Updated(fTP_ORDERS)
        End Function

On the Angular side, I'm using $resource based service to send the update. 
The code that calls the resource looks like this:

     (new FTPOrderService({
                        "key": vm.ID,
                        "data": vm
                    }, vm))
                        .$patch()
                        .then(function (data) {
                            alert("Order Saved!");
                        },
                            function (error) {
                                debugger;
                            }
                            ); 

The service is defined with:

    .factory('FTPOrderService', function ($resource) {
            var odataUrl = '../odata/FTP_ORDERS';
            var results = $resource('', {}, {
                'patch': {
                    method: 'PATCH',
                    params: {
                        key: '@key',
                    },
                    url: odataUrl + '(:key)'
                }
            });

            return results;
        })

I've also tried: 

    (new FTPOrderService({
                        "key": vm.ID,
                    }, vm))
                        .$patch(vm)
                        .then(function (data) {
                            alert("Order Saved!");
                        },
                            function (error) {
                                debugger;
                            }
                            ); 
and get the same results.

I believe that I have configured angular to send the data properly with:

    .config(['$httpProvider', function ($httpProvider) {
            $httpProvider.defaults.headers.patch = {
                'Content-Type': 'application/json;charset=utf-8'
            };
        }])

The debugger shows that I'm calling the URL with the appropriate key 
appended to it in parens and the request payload looks like this:

    {key: "1239990990", data: {loading: false, selectedRow: {}, lineItems: 
[,…], orderId: "1239990990",…}}
    data: {loading: false, selectedRow: {}, lineItems: [,…], orderId: 
"1239990990",…}
    key: "1239990990"

Any idea of what I'm missing? There are numerous examples out there using 
direct calls to $http.post and a few for .patch, but nothing current using 
$resource. 

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to