Search code examples
c#angularjsangular-promiseangular-resource

Access HttpResponseMessage from Web API in AngularJs using $resource


I have a c# web api method that's returning integer value as HttpResponseMessage, would like to access the same from the response in AngularJs using $resource, How?

Web API:

[HttpPut]
        [Route("DeleteFile")]
        public HttpResponseMessage DeleteFile(int cabinetFileID)
        {
            var fileName = cabinetDataAccess.GetFilePath(cabinetFileID);                  
                var returnVal = cabinetDataAccess.DeleteCabinetFile(cabinetFileID, UserEmail);
                return Request.CreateResponse(HttpStatusCode.OK, returnVal);                

        }

Service:

(function () {
    'use strict';

    angular
        .module('data')
        .factory('cabinetService', cabinetService);

    cabinetService.$inject = ['$resource', 'serviceBase'];

    function cabinetService($resource, serviceBase) {
            var deleteCabinetFileResource = $resource(serviceBase + '/api/Cabinet/DeleteFile?cabinetFileID=:cabinetFileID',null,{'update':{method:'PUT'}});

        return {                
            deleteCabinetFile: deleteCabinetFile
        };

        function deleteCabinetFile(cabinetFileID){
            return deleteCabinetFileResource
                .update({cabinetFileID:cabinetFileID},null)
                .$promise;
        }
    }
}());

controller:

function deleteThumbnail(cabinetFileID)
        {
           cabinetService
            .deleteCabinetFile(cabinetFileID)
            .then(function (data) {
                //How do i Access my return value here ???
                //Something like 
                if(data.returnVal === -1)
                //do something
            })
            .catch(function (err) {
                growl.err('Unable to delete  file, Please try later !', {ttl: 20000});
            })
        }

This code is getting me the response, how do i need to access the return value from data ?


Solution

  • Based on https://stackoverflow.com/users/5535245/georgeawg comment Changed My c# code as follows to return a Json Object and everything worked well.

        [HttpPut]
                [Route("DeleteFile")]
                public JObject DeleteFile(int cabinetFileID)
                {
                    var fileName = cabinetDataAccess.GetFilePath(cabinetFileID);                  
                        var returnVal = cabinetDataAccess.DeleteCabinetFile(cabinetFileID, UserEmail);
     var jsonString = Json(new JavaScriptSerializer().Serialize(new { returnVal }));
                    return JObject.Parse(jsonString.Content);      
                }
    

    In my AngularJs controller i am able to check if(data.returnVal === -1)