ReferenceLoopHandling.Ignore 在 WebApi Global.asax 中不起作用
Posted
技术标签:
【中文标题】ReferenceLoopHandling.Ignore 在 WebApi Global.asax 中不起作用【英文标题】:ReferenceLoopHandling.Ignore not working in WebApi Global.asax 【发布时间】:2016-01-25 15:58:50 【问题描述】:我有一个 API 端点,它返回一个循环错误(因为它链接了一个循环返回的连接类),例如
class A
virtual ClassAB;
class B
virtual ClassAB;
class AB
virtual ClassA;
virtual ClassB;
在 API GET 中,我需要从 ClassA 的角度返回 ClassB 的详细信息(在 ClassB GET 中反之亦然)。
当我得到时,我会执行以下操作:
IQueryable<ClassA> results = _dbset
.Include(x => x.ClassAB)
.Include(x => x.ClassAB.Select(y => y.ClassB))
.AsExpandable()
.Where(predicate)
.OrderBy(x => x.ID);
所以我得到了自引用循环错误。现在在我的数据库上下文中,我有:
Configuration.ProxyCreationEnabled = false;
Configuration.LazyLoadingEnabled = false;
在我的Global.asax
protected void Application_Start()
我有:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
但是,我仍然收到错误消息;任何想法如何解决这个问题?
【问题讨论】:
能否请您添加异常详细信息。异常类型、消息、堆栈跟踪等 @matthew Flynn:有什么例外? @Matthew ,我遇到了同样的错误,但找不到解决方法。作为一种解决方法,而不是返回整个结果集,我只从 web api 控制器返回所需的属性作为匿名类型。 【参考方案1】:尝试添加
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None;
【讨论】:
以上是关于ReferenceLoopHandling.Ignore 在 WebApi Global.asax 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章