[C#]从 AngularJs 使用 $resource 的 Web API 访问 HttpResponseMessage

标签: AngularJS C#
发布时间: 2017/2/23 20:07:36
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个 c# web api 方法返回整数值作为 HttpResponseMessage ,想要从响应中如何使用 $resource,AngularJs 访问相同吗?

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);                

        }

服务︰

(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;
        }
    }
}());

控制器︰

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});
            })
        }

这段代码就让我的反应,如何要从数据访问的返回值吗?

解决方法 1:

基于http://stackoverflow.com/users/5535245/georgeawg的评论改变了我的 c# 代码,如下所示来返回一个 Json 对象,一切运作很好。

    [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);      
            }

在我的 AngularJs 控制器我能够检查if(data.returnVal === -1)

官方微信
官方QQ群
31647020