Abp.AspNetCore.OData 访问 odata/$metadata 时自引用循环

Abp.AspNetCore.OData self-referencing loop when accessing odata/$metadata

我正在使用这个包配置一个新的 OData 项目。我已经按照文档配置了项目:https://aspnetboilerplate.com/Pages/Documents/OData-AspNetCore-Integration

当我访问路由 /odata/$metadata 时,出现以下异常:

Newtonsoft.Json.JsonSerializationException: 'Self referencing loop detected for property 'declaringType' with type 'Microsoft.OData.Edm.EdmEntityType'. Path 'result.schemaElements[0].declaredKey[0]'.'

当调用 await _next(httpContext); 时,AbpUnitOfWorkMiddleware class 会抛出此问题。

我可以通过将 .AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore); 添加到 Startup class 来绕过这个问题,但是这只会一直渲染 $metadata 直到浏览器死机了。

这可能是 ABP 框架如何处理这个特定路由的问题吗?如果我在没有 ABP 框架的情况下使用 Microsoft.AspNetCore.OData,那么 $metadata 路由可以正常渲染;它实际上作为 XML 文档返回。

有针对性的解决方案

解决方案与的答案相同。

One-liner 快速修复

或者,您可以在模块的 PreInitialize 方法中默认禁用换行:

Configuration.Modules.AbpAspNetCore().DefaultWrapResultAttribute.WrapOnSuccess = false;

之前:

之后: