2014-10-20 120 views
0

我有一个从服务器访问数据的网络API控制器:的Web API返回空值

public class ServicesController : ApiController 
{ 
    [AcceptVerbs("POST")] 
    public IList<TreeMenuItem> LoadMetadata() 
    { 
     List<TreeMenuItem> itemsMenu = new List<TreeMenuItem>(); 
     TreeMenuItem dataSource = new TreeMenuItem("1", "DataSources", null); 
     itemsMenu.Add(dataSource); 
     return itemsMenu; 
    } 
} 

其由angularJS CONTROLER是呼叫:

angular.module('App'). 
controller('TreeMenuController', ["$scope", "$http", treeMenuController]); 

function treeMenuController($scope, $http) { 
var baseUrl = "api/Services/LoadMetadata"; 
$http.post(baseUrl) 
    .then(function (result) { 
     $scope.roleList = result.data; 
    }); 

};

在浏览器的网络I具有:

Request Method:POST 
Status Code:200 OK 
Request Headersview source 
Accept:application/json, text/plain, */* 
Accept-Encoding:gzip,deflate 
Content-Length:2 
Content-Type:application/json;charset=UTF-8 

请求负载 {}

响应头:

HTTP/1.1 200 OK 
Content-Type: application/json; charset=utf-8 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Content-Length: 4 

在响应选项卡:[{}]。

出了什么问题?

+0

你确定它是'result.data'而不仅仅是'result'吗? – 2014-10-20 12:29:25

+0

我尝试了两种方法,看看Response Tab表单网络浏览器:这是我得到的:{{}] – BogdanIM 2014-10-20 12:32:42

+1

您是否在Web API中放置了一个断点 - 它到达那里了吗?你有另一个名称LoadMetadata吗? – MichaelLo 2014-10-20 12:47:30

回答

0

我让它工作: 大的帮助是响应消息的时候,我把浏览器的地址来访问API服务(API /服务/ LoadMetadata): 错误答案是在一个XML文件,我发现这是对象TreeMenuItem序列化的问题。建议是使用DataContract来修饰类和DataMember的类属性 - 就像在WCF中一样。在做完之后(需要将项目添加到System.Runtime.Serialization中),一切都很完美。