6

Sto utilizzando MVC 6 rc1 con EF 7 rc 1 Codice primo modello per recuperare i dati tramite il controller web api. Ho 3 tabelle simili a quelle qui sotto.Web Api (MVC 6) Il corpo Chunked non è stato terminato correttamente con il blocco 0 dimensioni

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

mio controller:

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

seguito è la mia sezione Startup.cs ConfigureServices.

  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>(); 

Quando chiamo l'API, ottengo l'errore come "corpo Chunked non terminare correttamente con pezzo 0-size" in Fiddler. Nel set di risultati del violinista, vedo solo il primo oggetto del set di risultati attesi con le proprietà fino a quando non vengono compilate le Categorizzazioni e le proprietà NO e gli oggetti rimanenti dopo (Dati JSON incompleti). Se non includo le categorizzazioni nel set di risultati, funziona perfettamente bene. Mi sto perdendo qualcosa? Nota: EF sta restituendo i dati correttamente ma si sta frammentando nella chiamata API e il client non è in grado di leggere i dati in modo completo.

+0

http://stackoverflow.com/questions/22608564/neterr-incomplete-chunked-encoding-in-chrome-only – Avi

+0

provato tutte quelle opzioni. non ha funzionato. Nel mio caso, non è solo il problema con Chrome, IE, Fiddler, Postman ad affrontare il problema hile Postman commette errori, Fiddler mostra almeno che i dati sono troncati. – TSR

+1

Sembra un loop infinito. detiene il prodotto categorizza e categorizza detiene il prodotto – Avi

risposta

0

Innanzitutto, assicurarsi di non inviare 1 TB di dati sul cavo, ma accanto a questo, mi assicuro che si stia testando questo senza Fiddler.

Fiddler dispone di alcune impostazioni in cui, in alcuni casi, il messaggio di un chunk può causare problemi.

Si prega di accertarsi che l'opzione di decodifica non è selezionata:

Decode Option

Se tutto il resto fallisce, si prega di fare in modo di darci maggiori dettagli per il vostro progetto sezione Startup.csConfigure/ConfigureServices.

+0

Grazie. L'opzione Decodifica non è selezionata, ha provato altri client senza il violinista con lo stesso risultato. Di seguito è la mia sezione Startup.cs ConfigureServices. Codice services.AddMvc(); services.AddCors(); var connectionString = Configuration.GetSection ("Data: DefaultConnection: ConnectionString"). Valore; services.AddEntityFramework() .AddSqlServer() .AddDbContext (opzioni => options.UseSqlServer (connectionString)); services.AddSingleton (_ => Configuration); services.AddSingleton (); ' – TSR

+0

Poi c'è qualcosa che interferisce con il normale flusso della vostra applicazione. Potrebbe essere un codice personalizzato o un altro processo sul computer che blocca le richieste (firewall, antivirus, antimalware, ecc.). Questo problema è presente solo sulla tua macchina o funziona su un'altra macchina? –

+0

Potresti aggiungerlo alla tua domanda non nel commento? Stiamo perdendo tutta la formattazione. –

7

Trovato il problema. Ciclo di autoriferimento rilevato per la proprietà "Prodotto" con tipo "Prodotto". Path '[0] .Categorizations [0]'.

Quindi, EF compila sia la raccolta di Categorizzazione nell'oggetto Prodotto sia l'oggetto Prodotto in Categorizzazione. Così, mentre la serializzazione a JSON è diventato un ciclo infinito, come:

prodotto> categorizzazioni (eachCategorization - Prodotto> categorizzazioni (eachCategorization - prodotti> categorizzazioni (eachCategorization - prodotti> categorizzazioni (....

Soluzione: sezione Modifica Startup.cs ConfigureServices come di seguito

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

Grazie per aver condiviso questo. È stato davvero utile – marianc

+1

@TSR mi hai quasi salvato i miei ultimi capelli, stavo lottando per qualcosa di sbagliato con il mio disegno dei dati sul lato EF, ma come hai detto, era la gestione del browser dell'errore di riferimento circolare JSON. – Nexus23