Web API (MVC 6) 청크 된 바디가 0 크기의 청크로 제대로 종료되지 않았습니다.

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

문제

Web API 컨트롤러를 통해 데이터를 검색하기 위해 EF 7 rc 1 Code First Model과 함께 MVC 6 rc1을 사용하고 있습니다. 아래에 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 크기의 청크로 제대로 종료되지 않았습니다."라는 오류가 표시됩니다. 피 들러 결과 세트에서는 분류가 채워질 때까지 속성이 설정된 예상 결과의 첫 번째 객체 만보고 그 이후의 속성과 나머지 객체 (불완전한 JSON 데이터) 만 표시됩니다. 결과 집합에 범주화를 포함하지 않으면 완벽하게 작동합니다. 내가 놓친 게 있니? 참고 : EF는 데이터를 올바르게 반환하고 있지만 API 호출에서 청크가 발생하고 클라이언트가 데이터를 읽을 수 없습니다.

인기 답변

문제를 찾았습니다. 'Product'유형의 'Product'속성에 대해 자체 참조 루프가 감지되었습니다. 경로 '[0]. 분류 [0]'.

따라서 EF는 Product 개체의 Categorization 컬렉션과 Categorization의 Product 개체를 모두 채 웁니다. 그래서 json으로 직렬화하는 동안 무한 루프가되었습니다.

제품> 분류 (각 카테고리 - 제품> 분류 (각 카테고리 - 제품> 분류 (각 카테고리 - 제품> 분류 (....

솔루션 : 아래와 같이 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는 합법적입니까? 예, 이유를 알아보십시오.