10

Mam projekt MVC 6, w którym używam narzędzia Fiddler do testowania interfejsu Web API. Jeśli podejmę następujące działanie kontrolera, który używa EntityFramework 7, aby zwrócić listę. Wtedy HTML będzie renderował się dobrze.Nie mogę uzyskać kontrolera ASP.NET MVC 6, który zwróci JSON

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

    return View(model); 
} 

Ale gdy próbuję zwrócić odpowiedź Json zamiast otrzymuję błąd 502.

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

    return Json(model); 
} 

jakiś pomysł dlaczego isnt obiektu szeregowane do JSON poprawnie?

+0

Czy możesz dodać niektóre dane sieciowe żądania i odpowiedzi z Fiddlera? – user700390

+0

Ponieważ otrzymujesz 502, po stronie serwera występuje błąd. Więc debuguj projekt i spójrz na logi. – poke

+0

Mówi 502 Bad Gateway HTTP/1.1 502 Bad Gateway Cache-Control: private Content-Type: text/html; charset = UTF-8 Serwer: Kestrel X-SourceFiles: = UTF-8 B WjpcRG9jdW1lbnRzXFZpc3VhbCBTdHVkaW8gMjAxNVxQcm9qZWN0c1xKZW5Tb2xvXHNyY1xKZW5Tb2xvXHd3d3Jvb3Q = = X-Powered-By???? ASP.NET Data: Sat, 16 stycznia 2016 23:16:58 GMT Długość treści: 4939 @poke – Dblock247

Odpowiedz

20

Przede wszystkim można użyć IEnumerable<Order> lub IEnumerable<object> jako typu zwrotnego zamiast JsonResult i zwrócić tylko orderRepository.GetAll(). Polecam przeczytanie dodatkowych informacji o the article.

O innym błędzie z Bad Gateway. Spróbuj dodać Newtonsoft.Json w najnowszej wersji 8.0.2 do zależnościami w package.json i używać użycie

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

Przy okazji można odtworzyć błąd „HTTP Error 502.3 - Bad Gateway”, które opisuje, gdybym po prostu ustawić punkt przerwania na deklaracji powrotu działającego kodu i poczekaj wystarczająco długo. W ten sposób wkrótce pojawi się błąd "Błąd HTTP 502.3 - Zła brama" w przypadku wielu typowych błędów.

Możesz rozważyć dla nas bardziej pomocne opcje serializacji. Na przykład:

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

Dziękuję, że działa. Czy są również dostępne opcje xml? – Dblock247

+1

@ Dblock247: MVC nie zwraca zwykle danych XML. Ustawienia są określonymi ustawieniami 'Newtonsoft.Json', który jest domyślnym serializatorem JSON w ASP.NET 5. – Oleg

+0

Dziękuję za informacje. Czy możesz polecić XML Serializer? – Dblock247

Powiązane problemy