无法 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 的任何想法?
首先,
您可以使用 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;
});