【问题标题】:aspnet core return json function returning invalid jsonaspnet核心返回json函数返回无效的json
【发布时间】:2018-11-17 21:42:43
【问题描述】:

我有销售和销售项目实体,我试图在 asp.net core 2.0 中使用 return json () 函数将一些 json 从控制器返回到前端

这是我的控制器代码:

[HttpGet]
public JsonResult GetSales(int saleId)
{
  SalesModel sales = saleRepository.All().FirstOrDefault(x => x.Id == saleId);
  sales.Items = saleItemRepository.All().Where(x => x.SalesId == 
  saleId).ToList();
  return Json(sales);
} 

在前面,使用jQuery ajax get 调用:

 function getSale(id) {
     return $.ajax({
              type: 'GET',
              url: "/Sales/GetSales",
              data: "saleId=" + id
         });
 }

 $.when(getSale(saleId)).then(function (res) {
      console.log(res);  
      }).fail(function (err) { 
         console.log(err);  
      });

在控制台上我得到 json,这是无效的:缺少数组结尾 }]}

{"salesDate":"2018-06-14T00:00:00","saleCode":"1527863276313","notes":"Ok","total":12.31,"status":"Due","discount":0.31,"grandTotal":12.0,"paymentMethod":"Cash","customerId":3,"customerModel":null,"items":[{"name":"hello","price":2.33,"quantity":4,"amount":9.32,"salesId":7

console error image here

但是当我对 salesItem 进行硬编码时,它返回了有效的 json,而且看起来还可以

public JsonResult GetSales(int saleId)
        {
            SalesModel sales = saleRepository.All().FirstOrDefault(x => x.Id == saleId);
            SalesItemsModel a = new SalesItemsModel { Name = "abc", Amount = 2.5, Id = 1, IsDelete = false, Price = 2.5, Quantity = 1, SalesId = 5};
            sales.Items.Add(a);
            return Json(sales);
        }

从数据库中获取有效 json 时我缺少什么?同样的代码在 aspnetmvc 5 上完美运行

【问题讨论】:

    标签: jquery asp.net json ajax


    【解决方案1】:

    尝试像这样更新您的代码:

    [HttpGet]
    public IActionResult GetSales(int saleId)
    {
      SalesModel sales = saleRepository.All().FirstOrDefault(x => x.Id == saleId);
      sales.Items = saleItemRepository.All().Where(x => x.SalesId == 
      saleId).ToList();
      return OK(sales);
    } 
    

    无需使用 Json 方法显式转换您的销售对象。另外,请注意我已将返回类型更改为 IActionResult 并返回 OK 响应。

    【讨论】:

    • 我在这里写问题之前也试过了,Ok() 函数也返回了无效的 json,也许sales.Items = saleItemRepository.All().Where(x => x.SalesId == saleId).ToList(); 行在这里造成了实际问题
    • 您是否尝试过只返回 saleItems 即Ok(saleItemRepository.All().Where(x => x.SalesId == saleId).ToList())
    • 是的,我试过了,也返回了无效的 json,但是当我只返回销售额而不获取 salesItem 时,它工作正常。仍然无法弄清楚我在这里缺少什么愚蠢的东西。但是一些代码正在运行 aspnet mvc 5 运行良好,没有任何问题。
    • 在 Chrome 开发者工具中,切换到 Network 选项卡,然后分析 Sales/GetSales api 调用。检查响应头 Content-Type 是否为 application/json 并检查从服务器返回的 json 响应。
    • 谢谢,我找到了,问题不在于return json() 函数,而在于EF 核心include() 方法。这是详细信息:github.com/aspnet/Mvc/issues/5910
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2019-10-14
    相关资源
    最近更新 更多