如何在.Net Core Web API中停止自引用循環?

asp.net-core-webapi c# entity-framework-core

我有一些問題,我猜這些問題與使用.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;

我懷疑這是在StartUp的ConfigureService()方法中處理的,但除此之外我不太了解。

或者有更合適的方法來處理這個問題嗎?

一般承認的答案

好的......我終於在此找到了一些參考資料。解決方案是:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddMvc()
        .AddJsonOptions(
            options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        );

    ...
}

我從這裡得到了這個


熱門答案

ReferenceLoopHandling.Ignore“隱藏”問題,而不是解決它。你真正需要做的是構建圖層。創建域對像以置於實體之上並將其包裝在某種服務/業務層中。查找存儲庫模式並應用它,如果它有幫助。您需要在實體和域對象之間進行映射,這使您有機會適應某種映射器(automapper)和驗證層。

如果您的域對象和實體完全相同,那麼您需要更多地考慮您的行為。

例如:您的實體是否具有軟刪除功能? (IsDeleted)旗幟?如果是這樣,這並不一定需要通過網絡回到客戶端,因此這是他們與眾不同的完美示例。

無論哪種方式,答案都不是在JSON中覆蓋它,而是改變你的架構。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow