【问题标题】:Passing an Array of object results in errors传递对象数组会导致错误
【发布时间】:2020-03-08 04:06:20
【问题描述】:

我已经按照以下示例在 ASP.NET Core 2.2 框架中创建了一个 API

[HttpPost]
[Authorize]
public IActionResult AddInvoiceRest([FromBody]AddInvoiceRetailRest[] InvoiceDetail)
{
}

这里AddInvoiceRetailRest 是类对象。我想将多个对象作为数组传递。

我正在使用邮递员进行测试。我已经按照下面的示例从原始主体传递了这个数组。

{
  "InvoiceDetail": [
    {
      "InvoiceMst": [
        {
          "InvoiceNo": 0,
          "CustId": 0,
          "SubTotal": 93,
          "TaxAmount": 13
        }
      ]
    }
  ]
}

问题出在 api 中,我收到空白数组而没有添加 [Frombody],当我添加 [FromBody] 时,Api 不会调用并显示如下错误

{
    "InvoiceDetail": [
        "The input was not valid."
    ]
}

类的定义是

public class AddInvoiceRetailRest   
    {
        public AddInvoiceMst[] InvoiceMst { get; set; }
        public AddInvoiceItemDetail[] InvoiceItemDetail { get; set; }
        public AddInvoicePaymentDetail[] InvoicePaymentDetail { get; set; }
        [Optional]
        public AddInvoiceItemLogDetail[] InvoiceItemLog { get; set; }
        [Optional]
        public string BillDetail { get; set; }
        [Optional]
        public PumpCartObject[] InvoicePumpCart { get; set; }
        [Optional]
        public InvoiceFeeOrDeposite[] InvoiceFeeOrDeposite { get; set; }
    }

在这个问题中,我只是放了一个请求的样本,而不是所有的键。 有人可以告诉我我做错了什么吗?

【问题讨论】:

  • 错误是什么?
  • @mororo 收到空白数组。不接收数据,
  • 你不需要{""InvoiceDetail"":在开始和}结束
  • 您能否发布 AddInvoiceRetailRest 类定义?我看到了双方括号,想知道类定义中是否存在任何集合
  • @mororo 是的。实际上在这里我刚刚发布了样本。让我编辑问题并发布完整定义

标签: c# asp.net-core postman asp.net-core-webapi


【解决方案1】:

您的问题是您希望 API 中有数组,但您传递的是单个对象 json 而不是数组。

试试这个:

[
    {
        "InvoiceMst":
        [
            {
                "InvoiceNo": 0,
                "CustId": 0,
                "SubTotal": 93,
                "TaxAmount": 13
            }
        ]
    }
]

【讨论】:

  • 谢谢。这是工作。基本上我的主要问题是我用 { } 括号传递 InvoiceDetail 键名。这不是必需的,非常感谢兄弟,我真的很感激。
  • @AbhijitPandya,这不仅仅是关键字。您的 json 以 { 开头,这意味着您正在尝试传递单个对象而不是数组。它需要以 [ 开头,这是一个数组。
【解决方案2】:

发布的数据与行动的预期不符。

一种选择是创建一个与预期数据匹配的模型

public class InvoiceDetailModel {
    public AddInvoiceRetailRest[] InvoiceDetail { get; set; }
}

并在动作中绑定到那个

[HttpPost]
[Authorize]
public IActionResult AddInvoiceRest([FromBody]InvoiceDetailModel model) {
    if(ModelState.IsValid) {
        AddInvoiceRetailRest[] invoiceDetail = model.InvoiceDetail;

        //...
    }

    return BadRequest(ModelState);
}

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多