【问题标题】:Access HttpResponseMessage from Web API in AngularJs using $resource使用 $resource 从 AngularJs 中的 Web API 访问 HttpResponseMessage
【发布时间】:2016-06-14 10:49:27
【问题描述】:

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

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

这段代码让我得到响应,我需要如何访问数据的返回值?

【问题讨论】:

  • 当你执行你的代码时,究竟包含什么数据?
  • 不,它不能那样工作。数据有以下信息:Resource {$promise: r, $resolved: true}$promise: r_bitField: 33554433_fulfillmentHandler0: (data)_promise0: undefined_receiver0: undefined_rejectionHandler0: Resource__proto__: r$resolved: true__proto__: Resource
  • 也许这个链接可以帮助你:stackoverflow.com/questions/29071785/…
  • $resource 服务使用angular.copy 填充$resource 对象,angular.copy 忽略原语。要么让您的服务器返回一个对象,添加一个响应拦截器来将响应转换为一个对象,要么使用$http 服务。
  • 是的,我更改了我的 c# 代码以返回一个 Json 对象并且它有效。非常感谢!

标签: c# angularjs angular-promise angular-resource


【解决方案1】:

基于https://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)

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多