无法 ASP.NET MVC 6 控制器返回 JSON

本文关键字:控制器 返回 JSON MVC ASP NET 无法 | 更新日期: 2023-09-27 18:30:43

我有一个MVC 6项目,我正在使用Fiddler来测试Web API。如果我采取以下控制器操作,该操作使用实体框架 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 的任何想法?

无法 ASP.NET MVC 6 控制器返回 JSON

首先,

您可以使用 IEnumerable<Order>IEnumerable<object> 作为返回类型而不是 JsonResult 并返回 orderRepository.GetAll() 。我建议您阅读文章和其他信息。

关于错误网关的另一个错误。尝试将最新版本 8.0.2 中的Newtonsoft.Json添加到 package.json 中的依赖项并使用

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

顺便说一下,可以重现错误"HTTP 错误 502.3 - 错误的网关",如果我只是在工作代码的返回语句上设置断点并等待足够长的时间,您可以描述该错误。因此,您将很快在许多常见错误上看到错误"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;
    });