Web Api(MVC 6)Chunked body沒有正確終止0大小的塊

asp.net-core-mvc asp.net-mvc asp.net-web-api c# entity-framework-core

我使用MVC 6 rc1與EF 7 rc 1 Code First Model通過web api控制器檢索數據。我有3個類似於下面的表。

class Product
{
    public int Id { get; set; }
    public string SomeProperty { get; set; }
    public virtual ICollection<Categorization> Categorizations { get; set; }
    public DateTime SomeProperty2 { get; set; }
    public string SomeProperty3 { get; set; }
    public string SomeProperty4 { get; set; }

}

// NOTE: Entity key should be (ProductId, CategoryId)
class Categorization
{
    public int ProductId { get; set; }
    public Product Product { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

class Category
{
    public int Id { get; set; }
    public ICollection<Categorization> Categorizations { get; set; }
}

我的控制器:

class Product
{
    public int Id { get; set; }
    public string SomeProperty { get; set; }
    public virtual ICollection<Categorization> Categorizations { get; set; }
    public DateTime SomeProperty2 { get; set; }
    public string SomeProperty3 { get; set; }
    public string SomeProperty4 { get; set; }

}

// NOTE: Entity key should be (ProductId, CategoryId)
class Categorization
{
    public int ProductId { get; set; }
    public Product Product { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

class Category
{
    public int Id { get; set; }
    public ICollection<Categorization> Categorizations { get; set; }
}

下面是我的Startup.cs ConfigureServices部分。

class Product
{
    public int Id { get; set; }
    public string SomeProperty { get; set; }
    public virtual ICollection<Categorization> Categorizations { get; set; }
    public DateTime SomeProperty2 { get; set; }
    public string SomeProperty3 { get; set; }
    public string SomeProperty4 { get; set; }

}

// NOTE: Entity key should be (ProductId, CategoryId)
class Categorization
{
    public int ProductId { get; set; }
    public Product Product { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

class Category
{
    public int Id { get; set; }
    public ICollection<Categorization> Categorizations { get; set; }
}

當我調用api時,我得到的錯誤是“在Fiddler中,Chunked body沒有正確地終止0大小的塊”。在fiddler結果集中,我只看到具有屬性的預期結果集的第一個對象,直到填充分類,之後沒有屬性和剩餘對象(不完整的JSON數據)。如果我在結果集中不包含分類,則它可以正常工作。我錯過了什麼嗎?注意:EF正確地返回數據,但它在api調用中被分塊,客戶端無法完整地讀取數據。

熱門答案

發現了這個問題。檢測到屬性“Product”的自引用循環,類型為“Product”。路徑'[0] .Categorizations [0]'。

因此,EF會填寫Product對像中的Categorization集合以及Categorization中的Product對象。因此,在序列化為json時,它變成了一個無限循環,如:

產品>分類(eachCategorization - 產品>分類(eachCategorization - 產品>分類(eachCategorization - 產品>分類(....

解決方案:更改Startup.cs ConfigureServices部分,如下所示

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



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因