Sai*_*udo 15 c# entity-framework-core asp.net-core-webapi
我有一些问题,我猜这些问题与使用.NET Core Web API和Entity Framework Core进行自引用有关.我添加时,我的Web API开始窒息.包括一些导航属性.
我发现旧的Web API中似乎是一个解决方案,但我不知道如何为.NET Core Web API实现相同的功能(我还处于早期学习阶段).
较旧的解决方案是将其粘贴在Global.asax的Application_Start()中:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
Run Code Online (Sandbox Code Playgroud)
我怀疑这是在StartUp的ConfigureService()方法中处理的,但除此之外我不太了解.
或者有更合适的方法来处理这个问题吗?
Sai*_*udo 40
好的......我终于在此找到了一些参考资料.解决方案是:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
...
}
Run Code Online (Sandbox Code Playgroud)
我从这里得到了这个
ReferenceLoopHandling。忽略“隐藏”问题,而不是解决问题。您真正需要做的是构建图层。创建域对象以使其位于您的实体之上,并将它们包装在某种服务/业务层中。查找存储库模式,并在有帮助的情况下应用它。您需要在实体和域对象之间进行映射,这使您有机会适合某种映射器(自动映射器)和验证层。
如果您的域对象和实体完全相同,那么您需要更多地考虑您的工作。
例如:您的实体是否具有软删除?(已删除)标志?如果是这样,则不必一定要通过Web返回到客户端,因此这是一个不同之处的完美示例。
无论哪种方式,答案都不是在JSON中覆盖它,而是改变您的体系结构。
小智 5
如果您使用的是ASP.NET Core 3.0,请遇到此问题,请安装NuGET软件包:Microsoft.AspNetCore.Mvc.NewtonsoftJson 3.0.0。
要替换尚未具有引用循环处理的新System.Text.Json,请在Startup.cs中执行此操作,请确保在ConfigureServices中包含以下内容:
如果使用最新的.Net Core 3.0方法:
services.AddControllers().AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
Run Code Online (Sandbox Code Playgroud)
还是旧方法:
services.AddMvc(option => option.EnableEndpointRouting = false)
.AddNewtonsoftJson(options =>
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9346 次 |
最近记录: |