ApiController可以返回带有其他对象集合的对象吗?

Gar*_*ill 3 c# asp.net-mvc-4 asp.net-web-api

如果我有一个Customer只有简单属性的类(例如Name,等等),那么我可以创建一个CustomersController派生自ApiController,并使用URL查询我的Customer对象/api/customers.

类似地,如果我有一个Order具有简单属性(Description,Amount)的类,那么我可以创建一个OrdersController并以相同的方式访问它.

但是,如果我然后在我的Customer类中添加一个属性,列出Order与之关联的s Customer:

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    // ...
    public virtual ICollection<Order> Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

...然后,当我尝试查询使用时,/api/customers我得到500服务器错误.我可以在其中放置一个断点,CustomersController并且可以看到它确实调用了正确的方法,并尝试返回一个值.但是,在框架的内容中,它无法将其转换为HTTP响应.

看起来它无法序列化Orders信息和/或将其打包为HTTP响应,但我不确定我需要做些什么来实现这一点.或者仅仅是WebApi的东西不是为了返回复杂的对象而设计的?


更新:我的代码在这里:https://gist.github.com/43ed2f29f8adfb44cef6


更新2:有关我得到的错误的更多信息:

Server error
The website encountered an error while retrieving http://localhost:1031/api/customers/6.
Run Code Online (Sandbox Code Playgroud)

它可能已关闭以进行维护或配置不正确.以下是一些建议:稍后重新加载此网页.HTTP错误500(内部服务器错误):服务器尝试完成请求时遇到意外情况.

Intellitrace日志显示以下内容:http://i.imgur.com/iHxJl.png

[我简直不敢相信Intellitrace窗口不允许我复制文本,因此我必须实际打印屏幕并上传图像.今年是几年?]


相关:ASP.Net Web API在VS中正确显示但给出了HTTP500

tug*_*erk 7

您正在传递将导致问题的实体框架实体.您需要数据传输对象来传递和接收您的数据.因为您将实体绑定在一起,所以它不允许您序列化数据.