Web-Api (MVC 6) Chunked Körper wurde nicht ordnungsgemäß mit 0-Size-Chunk beendet

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

Frage

Ich benutze MVC 6 rc1 mit EF 7 rc 1 Code First Model, um Daten über Web-API-Controller zu erhalten. Ich habe 3 Tabellen ähnlich wie unten.

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; }
}

Mein Controller:

[ActionName("searchProducts")]
        public IEnumerable<Product> searchProducts(string searchText,int? id)
        {
          var ret= db.Products
                .Include(s => s.Categorizations).Take(2).ToList();
          return ret;
        }

Unten ist mein Startup.cs ConfigureServices Abschnitt.

          services.AddMvc()
                .AddJsonOptions(options=>
                {
                    options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                    options.SerializerSettings.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore;
                });
            services.AddCors();

            var connectionString = Configuration.GetSection("Data:DefaultConnection:ConnectionString").Value;

            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<ContractsContext>(options => options.UseSqlServer(connectionString));


            services.AddSingleton(_ => Configuration);
            services.AddSingleton<IContractRepository, ContractRepository>();

Wenn ich die API anrufe, bekomme ich den Fehler, dass "Chunked Body in Fiddler nicht korrekt mit einem 0-Chunk endet". Im fiddler resultset sehe ich nur das erste Objekt des erwarteten Ergebnisses, das mit den Eigenschaften gefüllt ist, bis die Kategorisierungen gefüllt sind und danach KEINE Eigenschaften und verbleibende Objekte (Unvollständige JSON-Daten). Wenn ich die Kategorisierung nicht in die Ergebnismenge einbeziehe, funktioniert das einwandfrei. Fehle ich etwas? Hinweis: EF gibt Daten korrekt zurück, wird jedoch im API-Aufruf chunked und der Client kann die Daten nicht vollständig lesen.

Beliebte Antwort

Ich habe das Problem gefunden. Selbstreferenzierungsschleife für die Eigenschaft 'Produkt' mit dem Typ 'Produkt' erkannt. Pfad '[0] .Kategorisierung [0]'.

Daher füllt EF sowohl die Kategorisierungssammlung im Produktobjekt als auch das Produktobjekt in der Kategorisierung aus. Also, beim Serialisieren zu JSON wurde es eine Endlosschleife, wie:

Produkt> Kategorisierungen (eachCategorization - Product> Categorizations (eachCategorization - Product> Categorizations (eachCategorization - Product> Categorizations (....

Lösung: Ändern Sie den Abschnitt Startup.cs ConfigureServices wie folgt

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


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow