10

Ho un progetto MVC 6 in cui sto utilizzando Fiddler per testare le API Web. Se prendo la seguente azione del controller che utilizza EntityFramework 7 per restituire una lista. Quindi l'html andrà bene.Impossibile ottenere il controller ASP.NET MVC 6 per restituire JSON

[HttpGet("/")] 
public IActionResult Index() 
{ 
    var model = orderRepository.GetAll(); 

    return View(model); 
} 

Ma quando provo a restituire una risposta JSON invece ottengo un errore 502.

[HttpGet("/")] 
public JsonResult Index() 
{ 
    var model = orderRepository.GetAll(); 

    return Json(model); 
} 

Qualche idea sul perché l'oggetto non è serializzato correttamente in json?

+0

È possibile aggiungere alcuni dati di rete della richiesta e della risposta di Fiddler? – user700390

+0

Dato che si ottiene un 502, c'è un errore sul lato server. Quindi, fai il debug del progetto e guarda i log. – poke

+0

Si dice 502 Bad Gateway HTTP/1.1 502 Bad Gateway Cache-Control: privato Content-Type: text/html; charset = utf-8 Server: Kestrel X-SourceFiles: = UTF-8 B WjpcRG9jdW1lbnRzXFZpc3VhbCBTdHVkaW8gMjAxNVxQcm9qZWN0c1xKZW5Tb2xvXHNyY1xKZW5Tb2xvXHd3d3Jvb3Q = = X-Powered-By:???? ASP.NET Data: Sat, 16 gennaio 2016 23:16:58 GMT Content-Length: 4939 @poke – Dblock247

risposta

20

Prima di tutto è possibile utilizzare IEnumerable<Order> o IEnumerable<object> come tipo di ritorno, invece di JsonResult e tornare solo orderRepository.GetAll(). Vi consiglio di leggere the article fr ulteriori informazioni.

Informazioni su un altro errore con Bad Gateway. Provare ad aggiungere Newtonsoft.Json nella sua ultima versione 8.0.2 per le dipendenze in package.json e di utilizzare l'uso

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

Tra l'altro si può riprodurre l'errore "Errore HTTP 502.3 - Bad Gateway", che descrive se ho appena impostato punto di rottura sulla dichiarazione di ritorno del codice di lavoro e attendere abbastanza a lungo. Quindi vedrai l'errore "Errore HTTP 502.3 - Bad Gateway" molto presto su molti errori comuni.

Potete considerarci opzioni di serializzazione più utili. Ad esempio

services.AddMvc() 
    .AddJsonOptions(options => { 
     // handle loops correctly 
     options.SerializerSettings.ReferenceLoopHandling = 
      Newtonsoft.Json.ReferenceLoopHandling.Ignore; 

     // use standard name conversion of properties 
     options.SerializerSettings.ContractResolver = 
      new CamelCasePropertyNamesContractResolver(); 

     // include $id property in the output 
     options.SerializerSettings.PreserveReferencesHandling = 
      PreserveReferencesHandling.Objects; 
    }); 
+0

Grazie a te che funziona. Ci sono anche opzioni per xml? – Dblock247

+1

@ Dblock247: MVC non restituisce in genere dati XML. Le impostazioni sono impostazioni specifiche di 'Newtonsoft.Json', che è il serializzatore JSON predefinito in ASP.NET 5. – Oleg

+0

Grazie per le informazioni. Potete consigliare un serializzatore XML? – Dblock247