JSONを返すASP.NET MVC 6コントローラを手に入れる

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

質問

私はWeb APIをテストするためにFiddlerを使用しているMVC 6プロジェクトを持っています。 EntityFramework 7を使用してリストを返す次のコントローラアクションを実行するとします。その後、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の追加情報を読むことをお勧めします。

Bad Gatewayの別のエラーについて。 Newtonsoft.Jsonを最新バージョン8.0.2にpackage.json依存関係に追加して使用するようにしてください

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

ところで、エラー "HTTP Error 502.3 - Bad Gateway"を再現することができます。これは、作業コードのreturn文にブレークポイントを設定して十分に長く待っているかどうかを記述します。したがって、多くの一般的なエラーで、すぐにエラー "HTTP Error 502.3 - Bad Gateway"が表示されます。

私たちには、より有用なシリアライゼーションオプションを考えることができます。例えば

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


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ