无法让 ASP.NET MVC 6 控制器返回 JSON
Posted
技术标签:
【中文标题】无法让 ASP.NET MVC 6 控制器返回 JSON【英文标题】:Cant get ASP.NET MVC 6 Controller to return JSON 【发布时间】:2016-01-16 21:36:13 【问题描述】:我有一个 MVC 6 项目,我在其中使用 Fiddler 来测试 Web API。如果我采取以下使用 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 的任何想法?
【问题讨论】:
能否添加一些来自 Fiddler 的请求和响应的网络数据? 由于收到 502,服务器端出现错误。所以调试项目并查看日志。 它说 502 Bad Gateway HTTP/1.1 502 Bad Gateway Cache-Control: private Content-Type: text/html; charset = utf-8服务器:kestrel x-sourcefiles:=?utf-8?b?wjpcrg9jdw1lbnrzxfzpc3vhbcbtdhvkaw8gmjaxnvxqcm9qzwn0c1xkzw5tb2xvxhnyy1xkzw5tb2xvxhd3d3jvb3q =?x-powered-by:asp.net日期:asp.net日期:sat,2016年1月16日23:16:58 GMT内容长度:第4939章 您可以只使用public IEnumerable<Order>
或public IEnumerable<object>
而不是public JsonResult
并返回模型。我认为the link 会回答你所有的问题。
@Oleg 我已经尝试过 IEnumberable,但仍然没有运气。我确实注意到在提琴手中的内容类型是 text/html。会不会是这个原因。 ObjectResult 不应该将内容类型更改为 json 吗?
【参考方案1】:
首先,您可以使用IEnumerable<Order>
或IEnumerable<object>
作为返回类型而不是JsonResult
,并且只返回orderRepository.GetAll()
。我建议您阅读the article fr 的其他信息。
关于 Bad Gateway 的另一个错误。尝试将最新版本 8.0.2 中的 Newtonsoft.Json
添加到 package.json
中的依赖项中并使用使用
services.AddMvc()
.AddJsonOptions(options =>
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
);
顺便说一句,如果我只是在工作代码的返回语句上设置断点并等待足够长的时间,您可以重现错误“HTTP Error 502.3 - Bad Gateway”。因此,您很快就会在许多常见错误中看到错误“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;
);
【讨论】:
谢谢你的作品。 xml 也有选项吗? @Dblock247:MVC 通常不返回 XML 数据。这些设置是Newtonsoft.Json
的特定设置,它是 ASP.NET 5 中默认的 JSON 序列化程序。
感谢您提供的信息。你能推荐一个 XML 序列化器吗?
@Dblock247:首先你应该添加"Microsoft.AspNet.Mvc.Formatters.Xml"
。然后你就有了可以用来配置 Mvc 以使用 Xml 作为输入或输出格式的格式化程序。您可以尝试自己实施,如果遇到问题,请提出新问题。
@Dblock247:我看到你以前从未使用过投票。这真的很重要,它允许提供搜索内容有用的提示。它可以帮助其他访问者找到答案/问题。例如,请参阅here。您每天有权投票大约 30 个答案。如果您需要其他帮助,您应该主动使用权利。以上是关于无法让 ASP.NET MVC 6 控制器返回 JSON的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NEt MVC 使用 Web API 返回 Razor 视图
在 ASP.NET MVC 控制器中,如何让 Redirect(string URL) 方法不附加“#”?
ASP.Net MVC 4. 在单独的程序集中路由控制器返回错误 404