Fiddlerを使用してWebAPIをテストしているMVC6プロジェクトがあります。 EntityFramework7を使用してリストを返す次のコントローラーアクションを実行した場合。その後、htmlは正常にレンダリングされます。
[HttpGet("/")]
public IActionResult Index()
{
var model = orderRepository.GetAll();
return View(model);
}
しかし、代わりにJson応答を返そうとすると、502エラーが発生します。
[HttpGet("/")]
public JsonResult Index()
{
var model = orderRepository.GetAll();
return Json(model);
}
オブジェクトがjsonに正しくシリアル化されない理由についてのアイデアはありますか?
まず、戻り値の型としてJsonResult
の代わりに_IEnumerable<Order>
_または_IEnumerable<object>
_を使用し、orderRepository.GetAll()
だけを返すことができます。 記事 fr追加情報を読むことをお勧めします。
BadGatewayの別のエラーについて。最新バージョン8.0.2の_Newtonsoft.Json
_を_package.json
_の依存関係に追加し、使用してみてください
_services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
_
ちなみに、「HTTPエラー502.3-不正なゲートウェイ」というエラーを再現できます。これは、作業コードのreturnステートメントにブレークポイントを設定して、十分長く待つと説明します。したがって、多くの一般的なエラーですぐに「HTTPエラー502.3-不正なゲートウェイ」というエラーが表示されます。
より役立つシリアル化オプションを検討してください。例えば
_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;
});
_