Asp.net mvc 4 在Asp.Net MVC 4 RC Web API中,任何集合都会导致500状态代码的静默故障

Asp.net mvc 4 在Asp.Net MVC 4 RC Web API中,任何集合都会导致500状态代码的静默故障,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我完全不知道是什么导致了这一切 我有一个ASP.NETMVC4RC应用程序和一组WebAPI控制器。我试图返回一个对象,该对象包含IList中的一组子对象。每当我请求该对象时,我都会在浏览器上返回一个500错误,调试器中不会抛出明显的异常。我已经尝试在global.asax中放置一个应用程序错误处理程序,但也没有发现任何错误 不管列表是实际的数据库关系还是字符串的硬编码列表,无论哪种情况,请求都会失败。如果我将列表设置为null,则请求成功 如果删除该列表,请求将成功,并获得对象的XML(或JS

我完全不知道是什么导致了这一切

我有一个ASP.NETMVC4RC应用程序和一组WebAPI控制器。我试图返回一个对象,该对象包含IList中的一组子对象。每当我请求该对象时,我都会在浏览器上返回一个500错误,调试器中不会抛出明显的异常。我已经尝试在global.asax中放置一个应用程序错误处理程序,但也没有发现任何错误

不管列表是实际的数据库关系还是字符串的硬编码列表,无论哪种情况,请求都会失败。如果我将列表设置为null,则请求成功

如果删除该列表,请求将成功,并获得对象的XML(或JSON)表示

我也试过这句话-

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
捕获实际的异常,但仍然得不到任何回报

这是当前对象

public class Authority : IEntity
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Address1 { get; set; }
    public virtual string Address2 { get; set; }
    public virtual string City { get; set; }
    public virtual string County { get; set; }
    public virtual string State { get; set; }
    public virtual string ContactPostalCode { get; set; }

    //public virtual IList<PostalCode> PostalCodes { get; set; }
    public virtual IList<string> RandomTrash { get; set; }

    public VPA()
    {
        //PostalCodes = new List<PostalCode>();
        RandomTrash = new List<string> {"foo"};
    }
}
公共类权限:IEntity
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟字符串地址1{get;set;}
公共虚拟字符串地址2{get;set;}
公共虚拟字符串City{get;set;}
公共虚拟字符串country{get;set;}
公共虚拟字符串状态{get;set;}
公共虚拟字符串ContactPostalCode{get;set;}
//公共虚拟IList PostalCodes{get;set;}
公共虚拟IList随机垃圾{get;set;}
公共VPA()
{
//PostalCodes=新列表();
RandomTrash=新列表{“foo”};
}
}
注意注释掉的PostalCodes集合-这是一个真正的多对多数据库关系。我将其注释掉,并将其替换为虚拟的“RandomTrash”集合,失败似乎是一样的

我有一种感觉,不知何故,这是一个序列化失败,但我不知道如何避免它。如果有帮助的话,我会用NHibernate作为ORM


有人看到了吗?

回答我自己的问题,以防有人再次遇到这个问题

它最终在循环中跟随网格进行序列化。为了修复这个问题,我在其中一个模型的每个循环引用中添加了2个属性

[IgnoreDataMember]用于XML序列化程序 [JsonIgnore]用于JSON.Net的序列化程序

我在IList属性上添加了PostalCode类


也许有更好的解决办法。这种方法的缺点是它使我的API变得片面。我可以申请一个权限并获得它所有的邮政编码,但我不能申请一个邮政编码并获得它所有的权限

回答我自己的问题,以防有人再次遇到这个问题

它最终在循环中跟随网格进行序列化。为了修复这个问题,我在其中一个模型的每个循环引用中添加了2个属性

[IgnoreDataMember]用于XML序列化程序 [JsonIgnore]用于JSON.Net的序列化程序

我在IList属性上添加了PostalCode类


也许有更好的解决办法。这种方法的缺点是它使我的API变得片面。我可以申请一个权限并获得它所有的邮政编码,但我不能申请一个邮政编码并获得它所有的权限

请求是否击中了您的控制器?或者500状态在它可以进入您的操作之前返回?检查500响应的主体,那里应该有一个错误(调试器不会引发它,它被Web API吞没,但它在响应主体中返回一个错误)@SzilardMuzsi它确实击中了控制器,获取所有过程,并在渲染过程中失败。@FilipW无正文。响应完全为空。您是否尝试将
IList
更改为
IEnumerable
IQueryable
以查看错误是否仍然存在?请求是否命中控制器?或者500状态在它可以进入您的操作之前返回?检查500响应的主体,那里应该有一个错误(调试器不会引发它,它被Web API吞没,但它在响应主体中返回一个错误)@SzilardMuzsi它确实击中了控制器,获取所有过程,并在渲染过程中失败。@FilipW无正文。响应完全为空。您是否尝试将
IList
更改为
IEnumerable
IQueryable
以查看错误是否仍然存在?我发现,自从使用Visual Studio 2012的发行版以来,这些无声错误不再是无声的,您可以看到实际出了什么问题。我发现,自从使用Visual Studio 2012发布版本以来,这些无声错误不再是无声的,您可以看到实际出了什么问题。